Rails一次编辑多条记录
问题描述:
我觉得这可能非常简单,但我只是没有正确理解,所以我喜欢在我的应用中设置页面,我希望每个设置都像一个关键值存储区,例如:Rails一次编辑多条记录
+-------------------+--------------------------------+
| setting | value |
+-------------------+--------------------------------+
| twitter_username | something |
+-------------------+--------------------------------+
| facebook_url | http://facebook.com/someguy |
+-------------------+--------------------------------+
我的形式看起来是这样的:
<% form_tag set_admin_settings_path, :method => :put do %>
<ol>
<% for setting in @settings %>
<li class="field">
<label><%= setting.setting_name.humanize %></label>
<%= text_field_tag "[setting_value][]", setting.setting_value %>
</li>
<% end %>
<li class="submit">
<%= submit_tag "Update settings" %>
</li>
</ol>
<% end %>
一切呈现罚款,但是当我尝试保存的形式,没有保存:(
答
这是我认为它应该看起来,我已经修改了你的表单。这也假定你没有对设置对象进行任何验证,对于设置类的多个实例,验证和显示错误将会很棘手,但它可以完成。我的例子不会显示任何错误。
配置/ routes.rb中
map.namespace(:admin) do |admin|
admin.resources :settings, :collection => { :set => :put }
end
应用程序/控制器/管理/ settings_controller.rb
def set
#this is what I think your action should do
params[:settings].each do |setting|
@setting = Setting.find(setting[:id])
@setting.update_attributes(setting)
end
redirect_to admin_settings_path
end
应用/视图/管理/设定/ index.html.erb
<% form_tag set_admin_settings_path, :method => :put do %>
<ol>
<% for setting in @settings %>
<li class="field">
<label>
<%= setting.setting_name.humanize %>
</label>
<!-- settings[][field_name] will group the settings objects in params -->
<%= hidden_field_tag("setting_#{setting.id}_id",
setting.id,
:name => 'settings[][id]') %>
<%= text_field_tag("setting_#{setting.id}_setting_value",
setting.setting_value,
:name => 'settings[][setting_value]) %>
</li>
<% end %>
<li class="submit">
<%= submit_tag "Update settings" %>
</li>
</ol>
<% end %>
答
我认为你需要如社会您的设置名称与它的价值,也许尝试类似
<%= text_field_tag "[#{setting.setting_name}][]", setting.setting_value %>
太棒了!我认为最能帮助我了解什么是循环'params [:settings] .each'这是票证的事情,再次感谢。 – 2010-04-02 06:05:51