2011-06-30 7 views
5

私は、私が使用したい、このRails 3でカスタム_urlヘルパーを作成する方法は?

match '/news/:year/:id' => 'news#show', :as => :news 

を持っている:/news/n.date.year/の代わりに/news/n.id/current_news.id返し

<%= link_to n.title, n %> 

( n.id)

私はこれを取り除きたい:それを行う方法

<%= link_to n.title, news_url(n, :year => n.date.year) %> 

答えて

1

あなたはヘルパーファイル内でこのような何かを行うことができます。

def custom_link_to(*args) 
    name   = args[0] 
    obj   = args[1] 
    if obj.is_a?(News) # or whatever class you are using 
    link_to(name, news_url(obj, :year => obj.date.year)) 
    else 
    link_to(args) 
    end 
end 

を次に、あなたのビューで:

<%= custom_link_to n.title, n %> 

それとも、いくつかの類似したコードでlink_toヘルパーメソッドをオーバーライドすることができます。私は、他のlink_to呼び出しをうまくやめるチャンスが少ないので、custom_link_toメソッドを好むでしょう。しかし、もしあなたがそれを正しいとすれば、あなたは確かにそれを取り除くことができます。あなたはNewsHelperモジュールにこのような何かを追加するパスに

を生成ヘルパーはトリックを行う必要がありますオーバーライドすることができ

5

def news_path(news) 
    "/news/#{news.date.year}/#{news.id}" 
end 

その後<%= link_to n.title, n %>はあなたがニュースのオブジェクトに対してたいURLを与える

+3

この特殊なケースでは有効なアプローチですが、テスト可能ではなく、レールヘルパーを直接注入してURLヘルパーを使用する場所には適用されません – bbozo

関連する問題