更新字段而不重定向

时间:2011-03-12 17:48:52

标签: ruby-on-rails

我有一个投票系统。当用户单击“投票”按钮时,投票值增加1。

但问题是,这个增量动作需要重定向我不想做的事情。 我正在使用will_paginate对我的记录进行分页。 例如,如果用户在分页列表的第2页上投票选择了某个实体,则它应该保留在第2页上。但是,目前,它会重定向到第1页。

在视图中我有:

<ol>
    <% for number in @numbers%>
    <li>
        <%=number.value%>
        <%=button_to '+1',:action=>:increment,:id=>number.id,:remote=>true%>
        </li>
        <%end%>
        </ol>
        <%=will_paginate @numbers%>

在控制器中我有:

def increment

        number=Digit.find(params[:id])
        number.increment!(:value)

    end

但是当我不重定向时,我收到了这个错误:

Missing template digits/increment with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "c:/Sites/tester/app/views"

2 个答案:

答案 0 :(得分:1)

使用您当前的解决方案,rails正在寻找基于方法controller / method_name的视图。

您需要在递增数字后插入redirect_to。

要重定向到上一页,这是一个解决方案:

     redirect_to :back
  rescue ActionController::RedirectBackError
     redirect_to root_path

答案 1 :(得分:1)

另一种选择是使用XHR请求。

控制器代码看起来像这样:

def increment
  number=Digit.find(params[:id])
  number.increment!(:value)
  head :ok
end

这将返回一个标题作为具有200状态的响应,而不是其他任何内容。在你的javascript代码中,你只需处理显示逻辑,如果响应返回为200,则递增页面上的计数,如果不是,则可能显示错误。