1


0

複数のレコードを一度に編集するRails

これは本当に簡単かもしれませんが、うまくいかないので、アプリに設定ページがあり、各設定をキーバリューストアのようにしたいのです。

+-------------------+--------------------------------+
| setting           | value                          |
+-------------------+--------------------------------+
| twitter_username  | something                      |
+-------------------+--------------------------------+
| facebook_url      | http://facebook.com/someguy    |
+-------------------+--------------------------------+

私のフォームは次のようになります。

<% form_tag set_admin_settings_path, :method => :put do %>

  <% for setting in @settings %>

      <%= setting.setting_name.humanize %>
      <%= text_field_tag "[setting_value][]", setting.setting_value %>

  <% end %>

      <%= submit_tag "Update settings" %>



<% end %>

すべて正常にレンダリングされますが、フォームを保存しようとすると、何も保存されません:(

2 Answer


3


これは私がそれがどのように見えるべきだと思うかです、私はあなたのフォームを少し修正しました。 また、これは、設定オブジェクトで検証を行っていないことを前提としています。検証とエラーの表示は、単一クラスの設定クラスの複数のインスタンスでは扱いにくいですが、実行できます。 私の例ではエラーは表示されません。

config / routes.rb

  map.namespace(:admin) do |admin|
    admin.resources :settings, :collection => { :set => :put }
  end

app / controllers / admin / 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

app / views / admin / settings / index.html.erb

<% form_tag set_admin_settings_path, :method => :put do %>

  <% for setting in @settings %>


        <%= setting.setting_name.humanize %>


      <%= 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]) %>

  <% end %>

      <%= submit_tag "Update settings" %>



<% end %>


0


設定名とその値を関連付ける必要があると思います。

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