2011-06-30 19 views
5

我有了這個如何在Rails 3中自定義_url helper?

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

我想用:

<%= link_to n.title, n %> 

(這反而返回/news/n.date.year/的/news/n.id/current_news.id 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的輔助方法。我更喜歡custom_link_to方法,因爲它提供了更少的機會來搞砸其他link_to調用。但是,如果你做對了,你當然可以擺脫它。

5

可以覆蓋生成的路徑幫手

添加類似這樣的NewsHelper模塊應該做的伎倆:

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

然後<%= link_to n.title, n %>會給你你想要的網址新聞對象

+3

在這種特殊情況下,它是一種有效的方法,但它不是可測試的,它不會擴展到URL helper被直接注入rails routes helpers的地方 – bbozo

相關問題