Rails редактирование нескольких записей одновременно - PullRequest
1 голос
/ 02 апреля 2010

Я чувствую, что это может быть очень просто, но я не совсем понимаю, поэтому у меня есть страница настроек в моем приложении, и я хочу, чтобы каждый параметр походил на хранилище значений ключей, например:

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

Все отображается нормально, но когда я пытаюсь сохранить форму, ничего не сохраняется: (

Ответы [ 2 ]

3 голосов
/ 02 апреля 2010

Вот так, я думаю, это должно выглядеть, я немного изменил вашу форму. Это также предполагает, что вы не проводите никакой проверки объектов настройки, проверка и отображение ошибок будет непростым делом с несколькими экземплярами класса Setting в одной форме, но это можно сделать. Мой пример не будет отображать никаких ошибок.

конфиг / 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 голосов
/ 02 апреля 2010

Я думаю, вам нужно связать название вашей настройки с ее значением, возможно, попробуйте что-то вроде

<%= text_field_tag "[#{setting.setting_name}][]", setting.setting_value %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...