usr*_*kxx 5 ruby ruby-on-rails ruby-on-rails-3
我有这个
match '/news/:year/:id' => 'news#show', :as => :news
Run Code Online (Sandbox Code Playgroud)
我想用:
<%= link_to n.title, n %>
Run Code Online (Sandbox Code Playgroud)
(返回/news/n.id/current_news.id而不是/news/n.date.year/n.id)
我想摆脱这个:
<%= link_to n.title, news_url(n, :year => n.date.year) %>
Run Code Online (Sandbox Code Playgroud)
怎么做?
您可以覆盖生成路径的帮助程序
将这样的内容添加到NewsHelper模块应该可以解决这个问题:
def news_path(news)
"/news/#{news.date.year}/#{news.id}"
end
Run Code Online (Sandbox Code Playgroud)
然后<%= link_to n.title, n %> 会给你想要的新闻对象的网址
您可以在辅助文件中执行类似的操作:
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
Run Code Online (Sandbox Code Playgroud)
那么在你看来:
<%= custom_link_to n.title, n %>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用一些类似的代码覆盖link_to辅助方法。我更喜欢 custom_link_to 方法,因为它不太可能搞砸其他link_to调用。但如果你做得对,你肯定可以逃脱惩罚。