我的表格看起来像这样:
<%= 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,值是需要转到设置表中值列的值。
答案 0 :(得分:1)
params[:settings].each do |id, value|
Model.find(id).update_attributes(value: value)
end