我在路线中有这条线:
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 #
怎么了?
答案 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 /票/新