【问题标题】:Radio Button Updating Database with Last Value Only仅使用最后一个值更新数据库的单选按钮
【发布时间】:2016-07-27 20:15:30
【问题描述】:

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

<% @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 会将值设置为所选的值,但事实并非如此。我可能不完全理解单选按钮或者我遗漏了一些东西,但我非常感谢您的帮助。提前致谢!

【问题讨论】:

    标签: ruby-on-rails database button radio


    【解决方案1】:

    你不应该像这样在视图内部更新。

    您应该在视图中创建一个表单,将值发送到控制器操作(在本例中为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 %>
    

    【讨论】:

    • 是的,我已经阅读了有关在控制器中进行更新的信息。但我不完全了解如何使用控制器进行更新,对于这种情况,我的 .erb 类的控制器中包含分页代码,因此我无法更新该特定 def 类中的单个用户。也许你有一个很好的资源让我了解更多关于更新控制器中的信息?抱歉,我在 Rails 中是全新的,所以有些事情仍然很混乱。
    • 我明白了。基本上,通过 html 表单,您将“发送值”到您的控制器,然后控制器将决定如何处理它们(在您的情况下,更新您的用户)。这些文章可能是很好的起点:sitepoint.com/…guides.rubyonrails.org/…
    【解决方案2】:

    我不知道您为什么要在视图本身中更新用户,这违反了 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 = > 结果)将在视图渲染之前执行。 因此,这不会在选择复选框时触发 update_attributes 方法。 因此,您必须使用提交按钮并在用户控制器中添加 **update"" 操作。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多