我无法使用单选按钮为每个用户更新数据库中的值。
<% @users.each do |user| %>
<% result = 0%>
<h4> <%= user.name %> </h4>
<%= form_for(user) do |f| %>
<%= f.label :Quetion_one %>
<%= f.radio_button :question_one, result = 1 %>
<%= f.radio_button :question_one, result = 2 %>
<%= f.radio_button :question_one, result = 3 %>
<% user.update_attribute(:question_one, result) %>
<% end %>
<% end %>
我正在使用Paginate,但这是重点。我试图通过每个用户并选择一个问题的值,1,2或3,但不幸的是我设置它的方式,它只是为每个用户设置数据库的最后一个值(3) 。我想如果我有一个结果变量并将其设置为每个单选按钮的某个值,则update_attribute会将值设置为所选的值,但事实并非如此。我可能没有完全理解单选按钮或者我错过了什么,但我真的很感激帮助。提前谢谢!
答案 0 :(得分:0)
您不应该像这样更新视图内部。
您应该在视图中创建一个将值发送到控制器操作的表单(在本例中为users_controller#create
和/或users_controller#update
),然后您可以使用属性值更新模型。
至于表格,这应该有效(基于method's documentation):
<%= form_for(user) do |f| %>
<%= f.label :Question_one %>
<%= f.radio_button :question_one, 1 %>
<%= f.radio_button :question_one, 2 %>
<%= f.radio_button :question_one, 3 %>
<%= f.submit %>
<% end %>
答案 1 :(得分:0)
我不知道你为什么要在视图中更新用户,这违反了rails惯例。您应该在控制器中使用更新操作,如(controller#update)。并且只在视图中使用提交按钮。
<%= form_for(user) do |f| %>
<%= f.label :Quetion_one %>
<%= f.radio_button :question_one, result = 1 %>
<%= f.radio_button :question_one, result = 2 %>
<%= f.radio_button :question_one, result = 3 %>
<%= f.submit "Update" %>
<% end %>
再次,如果您想在视图中更新,那么它将使用 result = 0 更新用户,但是在选择复选框后它不会更新值集,因为user.update_attributes(: question_one =&gt; result)将在视图渲染之前执行。 所以,这不会在选择复选框时触发update_attributes方法。 因此,您必须使用提交按钮并添加**更新&#34;&#34;用户控制器中的操作。
def update
user = User.where(:id => params[:id]).first
if user && user.update_attributes(params[:user])
#on sucess
else
#on failing to update
end
end