单选按钮仅更新具有最后值的数据库

时间:2016-04-07 06:03:08

标签: ruby-on-rails database button radio

我无法使用单选按钮为每个用户更新数据库中的值。

<% @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会将值设置为所选的值,但事实并非如此。我可能没有完全理解单选按钮或者我错过了什么,但我真的很感激帮助。提前谢谢!

2 个答案:

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