我正在尝试使用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'?我错过了什么?
答案 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; :发帖不是帖子控制器。