我有一个 Rails 3 表单,其中包含 100 多个问题。每次单击与答案关联的单选按钮时,表单都会返回所有 100 多个问题的答案。因此,当某人完成时,所有 100 个问题的 100 条记录将被更新。总共10,000条记录更新。
我正在尝试思考如何更改代码,以便每次点击仅更新一个答案,而不是全部 100 个答案。
如果您想了解更多细节,代码如下。谢谢。
形式:
<%= form_tag update_result_answers_path, :remote => true do %>
<% @answers.each do |q| %>
<%= q[0].question %>
<% [ 1, 2, 3, 4, 5 ].each do |f| %>
<%= radio_button_tag q[1].id, f, f == q[1].score, :class => 'submittable' %>
<% end %>
<% end %>
<% end %>
application.js:
$('.submittable').live('change', function() {
$(this).parents('form:first').submit();
return false;
});
Controller :
def update_result
@answers = []
params[:answer].each_pair do |key,value|
ans = Answer.find(key.to_i)
ans.update_attributes(:score => value)
@answers << ans
end
render :nothing => true
end
最佳答案
好吧,我想我现在遇到了问题。 他就是我会做的:
<%= form_tag update_score_answer_path(answer), :id => "answer_#{answer.id}_form", :remote => true do %>
<%= answer.question %> <%# didn't understand this here, maybe it's outside of the loop? %>
<% [ 1, 2, 3, 4, 5 ].each do |f| %>
<%= radio_button_tag answer.id, f, f == answer.score, :class => 'submittable' %>
<% end %>
<% end %>
然后循环它们:
<% @answers.each do |answer| %>
<%= render 'answers/answer_form', :answer => answer %>
<% end %>
然后在 Controller 上
def update_score
@answer = Answer.find(params[:answer_id])
@answer.score = params[:answer][:score]
@answer.save
end
并用js响应
$('#answer_<%= @answer.id %>_form').replaceWith("<%= escape_javascript( render 'answers/answer_form', :answer => @answer ) %>")
Controller 可能不正确,但你明白了。如果您愿意,您也可以只更新单选按钮,只返回 javascript。
希望这有帮助
此外,如果需要,您可以使用
切换渲染render :partial => 'lala', :locals => { :answer => object }
关于jquery - 对于 jQuery、Rails 3 更新,您能否呈现具有多个表单而不是一个表单的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5929602/