我是Rails的新手,我相信这是一个非常简单的问题。我正在设计一个投票申请表。按下按钮后,投票数增加1。控制器方法代码如下所示:
def vote
@item = Item.find(params[:id])
@item.increment(:votes)
@item.save
redirect_to :show
end
该按钮的代码为:
%= button_to "Vote", :method => "Vote" %
这似乎是我的错误发生的地方。当我试图让应用程序运行该方法然后返回到显示页面时,它试图转到/:id?method = Vote的url。任何建议都非常感谢!我确信这是一个不完全理解路由概念的问题,但说实话,我有点难过。
答案 0 :(得分:0)
:method
与HTTP谓词有关,默认为:post
,但由于您要更新对象,因此您可能希望使用:put
button_to "Vote", vote_item_path(@item), :method => :put
其中@item
是您的Item
对象。您还需要定义路线
put 'items/:id/vote' => 'items#vote', :as => :vote_item
为澄清此处发生的情况,如果vote_item_path(@item)
items/1/vote
将生成网址@item.id = 1