button_to with:remote => true不会更新我页面上的投票计数

时间:2011-03-11 15:48:26

标签: ruby-on-rails ruby-on-rails-3

我的视图中有一个投票按钮。单击此按钮时,它必须增加特定视频的投票。

在我看来,我有:

<%= 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'`

3 个答案:

答案 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%>

将此投票逻辑与视频或任何其他内容相关联不应该太费力。 :)