Rails从一个表单更新多个记录上的一列

时间:2013-12-06 03:08:44

标签: ruby-on-rails forms postgresql

我的表格看起来像这样:

<%= form_tag site_update_admin_settings_path, :method => :put do %>
  <fieldset>
    <legend>
      <h2>Default Meta Information</h2>
    </legend>
    <% for setting in @settings[:default_meta] %>
      <div class="form-group">
        <label><%= setting.name %></label>
        <span class="help-block"><%= setting.description %></span>
        <input type="text" class="form-control" name="settings[<%= setting.id %>]" value="<%= setting.value %>" />
      </div>
    <% end %>
  </fieldset>
  <fieldset>
    <legend>
      <h2>Social Media Information</h2>
    </legend>
    <% for setting in @settings[:social_media] %>
      <div class="form-group">
        <label><%= setting.name %></label>
        <span class="help-block"><%= setting.description %></span>
        <input type="text" class="form-control" name="settings[<%= setting.id %>]" value="<%= setting.value %>" />
      </div>
    <% end %>
  </fieldset>
  <fieldset>
    <legend>
      <h2>Analytics Information</h2>
    </legend>
    <% for setting in @settings[:analytics] %>
      <div class="form-group">
        <label><%= setting.name %></label>
        <span class="help-block"><%= setting.description %></span>
        <input type="text" class="form-control" name="settings[<%= setting.id %>]" value="<%= setting.value %>" />
      </div>
    <% end %>
  </fieldset>
  <%= submit_tag "Save Settings", class: "btn btn-primary" %>
<% end %>

表单最后有大约10个可以编辑的字段。每个字段的值映射到数据库中每个记录的值列。数据库表的示例如下所示:

|   id    |         name         |       value        |
-------------------------------------------------------
|    1    |   site_title         |     Page Title     |
|    2    |   twitter_username   |    TwitterHandle   |

所以基本上,表单字段变成了一个将在params[:settings]中保存的设置数组。设置参数保存每个字段的键值对(id =&gt; value)。表单仅更新特定行的值列(由id确定)。我有表单提交和创建params[:settings]哈希,但还没有弄清楚如何让控制器更新记录。思考?如果您还需要更多信息,请与我们联系。

更新 在params哈希中,settings看起来像这样:

"settings"=>{"1"=>"Website Title", "5"=>"TwitterHandle", "10"=>"FooBar"}

键是设置表记录的id,值是需要转到设置表中值列的值。

1 个答案:

答案 0 :(得分:1)

params[:settings].each do |id, value|
  Model.find(id).update_attributes(value: value)
end