2011-01-27 15 views
1

SO URLと同様に記事のタイトルをURLに追加したいと思います。私は、しかし、私はそれが少し冗長見つけ、私の別の質問RailsルートとURLヘルパーの冗長性を減らす

# routes.rb 
match '/articles/:id/:title' => 'articles#show', :as => :article_with_title 

# articles/index.html.erb 
link_to article.title, article_with_title_path(article, :title => article.title.downcase.gsub(/[^a-z0-9]+/,' ').strip.gsub(/\s+/,'-')) 

それは作品にanswerで、次の設定を使用することが示唆されました。それをより良くする方法はありますか?複数のルートを処理するための普遍的な方法はありますか?

match '/articles/:id/:title' => 'articles#show' 
match '/users/:id/:name' => 'users#show' 
etc. 

備考:

  1. 現在、以下のルートが正常に動作:/article/:id/:action/article/:id/:title記事は、私はルートが明示的:idが含まれているためfriendly_idは、ここに不必要であると考えていたタイトルedit, show, index, etc.
  2. を持つことができないという条件で。
  3. 私は見ての通り
  4. は、SO /users/:action/:id

答えて

1

モデル内でto_paramを上書きするだけです。メモリから未検証の例:

def to_param 
    self.id + "-" + self.name.parameterize 
end 

このアプローチは、あなたがルーターを変更する必要はありませんし、またModel.find(params[:id])または類似を使用し続けることができることを意味します。

基本的には、別の答えでレールスカストが言いましたが、friendly_idのコアも同じです。

1

ライアンベイツは、URLの代わりに、モデルの名前、またはその他の属性を使用して優れたscreencastをした、質問/question/:id/:title/posts/:id/:actionため、ユーザー/users/:id/:nameのための異なる経路を使用していますid。