我有一个投票系统。当用户单击“投票”按钮时,投票值增加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"
答案 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,则递增页面上的计数,如果不是,则可能显示错误。