如何在Rails 3中制作自定义_url助手?

时间:2011-06-30 02:31:17

标签: ruby-on-rails ruby ruby-on-rails-3

我有这个

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) %>

怎么做?

2 个答案:

答案 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次调用的可能性。但如果你做对了,你肯定可以逃脱它。