我有这个
match '/news/:year/:id' => 'news#show', :as => :news
我想用:
<%= link_to n.title, n %>
(返回/news/n.id/current_news.id而不是/news/n.date.year/n.id)
我想摆脱这个:
<%= link_to n.title, news_url(n, :year => n.date.year) %>
怎么做?
答案 0 :(得分:5)
您可以覆盖生成路径的帮助程序
将这样的内容添加到NewsHelper模块应该可以解决这个问题:
def news_path(news)
"/news/#{news.date.year}/#{news.id}"
end
然后<%= link_to n.title, n %>
将为您提供所需的新闻对象网址
答案 1 :(得分: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
次调用的可能性。但如果你做对了,你肯定可以逃脱它。