我的视图中有一个投票按钮。单击此按钮时,它必须增加特定视频的投票。
在我看来,我有:
<%= button_to 'Vote', :method => :add_point, :remote=>true %>
在我的控制器里,我有,
@video=Video.find(params[:id])
@video.increment!(:votes)
但是当点击按钮时,投票价值保持不变。此代码中的问题是什么?
更新:现在,我收到以下错误:Couldn't find Video without an ID
app/controllers/videos_controller.rb:8:in
add_point'`
答案 0 :(得分:5)
而不是method
您应该使用action
。还要检查此操作应该使用哪种方法(在routes.rb中)
<%= button_to 'Vote', :action => :add_point, :remote=>true %>
答案 1 :(得分:1)
首先,确保操作正在完成。转到项目目录并执行:
tail -f log/*.log
然后在观看控制台时再次单击该按钮。如果你在“视频”表上看到一些UPDATE sql,那么你就到了一半。
其次,你是否为了响应Ajax请求而编写了一些JS?而不是截断一些非常重要的东西,请在Unobtrusive Javascript上查看此railscast:
视频: http://railscasts.com/episodes/205-unobtrusive-javascript
文本: http://asciicasts.com/episodes/205-unobtrusive-javascript
答案 2 :(得分:1)
感谢大家提供的宝贵意见。我测试了非Ajax版本,它正在运行。只是Iam使用默认Route.Ajaxing它并添加一个Route应该很容易....或者至少我希望它是。 这是控制器:
def increment
number=Digit.find(params[:id])
number.increment!(:value)
#number.update_attribute(:value,"value+1")
redirect_to(:action=>'index')
end
以下是观点:
<%=button_to '+1',:action=>:increment,:id=>number.id%>
将此投票逻辑与视频或任何其他内容相关联不应该太费力。 :)