Rails中自定义路由的问题

时间:2009-06-02 10:45:59

标签: ruby-on-rails routes

我在路线中有这条线:

map.resources :questions, :new => {:vote_for => :put, :vote_against => :put}, :has_many => :replies, :shallow => true

我在视图中使用以下助手:

link_to 'OK', vote_for_question_path(@question), :method => :put
link_to 'NO', vote_against_question_path(@question), :method => :put

但不幸的是,我的代码有问题,正如Rails所说:

undefined method `vote_for_question_path' for #

怎么了?

1 个答案:

答案 0 :(得分:2)

看起来您的路线语法错误。

如果要添加新的成员路由(即适用于单个资源实例的路由),那么您应该这样做:

map.resources :questions,
              :member => { :vote_for => :put, :vote_against => :put },
              :has_many => :replies, :shallow => true

另一方面,如果您想覆盖标准的“新”网址段,那么它将是:

map.resources :questions, :path_names => { :new => 'vote_for' },
              :has_many => :replies, :shallow => true

- 注意相应的控制器操作仍将命名为“new”。这将允许以下URL:

/问题/ vote_for

但是,查看您尝试执行的操作时,您可能需要考虑创建新的Vote资源。当用户投票支持问题并且符合标准Rails的RESTful路由约定时,就会创建这个。然后,对某个问题进行投票可能会有以下网址:

/问题/ 22 /票/新