如何覆盖rails url helper的控制器名称?

时间:2015-03-20 22:16:39

标签: ruby-on-rails

我有一个Post模型,其category属性和相应的PostsController

我想覆盖默认的url helper来生成以下内容:

@post = Post.create(category: 'posts')
<%= link_to 'Post Link', @post %>
# /posts/1

@post = Post.create(category: 'articles')
<%= link_to 'Article Link', @post %>
# /articles/2

我想调用Post的默认网址助手,但要根据category列创建不同的网址。

更新

我最终覆盖了网址助手:

module PostsHelper
  def post_path(post, options={})
    self.send("#{post.category}_path", post, options)
  end

  def post_url(post, options={})
    self.send("#{post.category}_url", post, options)
  end
end

1 个答案:

答案 0 :(得分:1)

命名路由是您想要的:

get 'posts/:id', to: 'posts#<controller-action>', as: 'posts'

<%= link_to 'Post Link', posts_path(@post) %>

get 'articles/:id', to: 'posts#<controller-action>', as: 'articles'

<%= link_to 'Article Link', articles_path(@post) %>

见这里:http://guides.rubyonrails.org/routing.html#naming-routes