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 %> 
+0

太棒了!我认为最能帮助我了解什么是循环'params [:settings] .each'这是票证的事情,再次感谢。 – 2010-04-02 06:05:51

我认为你需要如社会您的设置名称与它的价值,也许尝试类似

<%= text_field_tag "[#{setting.setting_name}][]", setting.setting_value %>