使用Vote_fu / Thumbs_up gem路由错误(GET而不是POST)

时间:2011-12-09 07:03:41

标签: ruby-on-rails-3 routes

我正在尝试使用vote_fu gem并遇到其他人也遇到的问题,但我无法用别人的解决方案来解决这个问题。

我不认为这个问题与宝石直接相关......而是与某些错误的路线或缺少参数有关..

我有一个Msg模型,其中包含act_as_voteable。 对于用户模型,我添加了act_as_voter

在Msg控制器中,我添加了

def votefor
    @msg= Msg.find(params[:id])
    current_user.vote_for(@msg)
    redirect_to :back
end

在路线中:

 resources :msgs do
        member do
            post :votefor
        end
    end

对于Msg的节目,我添加了

<%= link_to "Vote Up", votefor_msg_path(@msg), :method => :post %>

但是当我点击创建的链接时,我得到了

Routing Error

No route matches [GET] "/msgs/1/votefor"

为什么'GET'而不是'POST'?我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为回答这个问题已经很晚了。我大多认为你一定已经弄明白了...我遇到了同样的问题&amp;我理解为什么......

这是来自routes.rb

的示例评论
  # Sample resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end

此处的post 'toggle'不是后置控制器,而是:method => 'post'

link_to默认使用:method => 'get',但您可以使用:method => 'post'

覆盖它

如果您在没有link_to

的示例中使用:method => 'post' ..

您的路由应该是

resources :msgs do
   member do
   get :votefor
   end
end

希望这有帮助!

<强>更新

怀疑你有:

link_to with a:method =&gt; :交

使用此

<%= link_to "Vote Up", votefor_msg_path(@msg), :method => :post %>

并且在路线中它应该是

resources :msgs do
       member do
       post :votefor
       end
end

帖子:votefor ..是:method =&gt; :发帖不是帖子控制器。

请检查brady8's answer