ActiveAdmin编辑从部分加载的相同自定义窗体中的多个模型

时间:2014-08-08 15:53:11

标签: ruby-on-rails activerecord activeadmin formtastic

我有这种情况,我无法弄清楚如何使它工作。我有一个设置模型。该模型有两个字段,键和值。因此,对于我需要添加到rails应用程序的每个新设置,我只需使用键和我想要的值创建一个新的设置模型。

我正在使用ActiveAdmin,我需要创建一个允许我同时编辑所有键的表单,这意味着从同一个表单同时编辑设置(Setting.all)中的所有模型。

所以我在尝试编辑时能够渲染自定义部分,但问题是我无法找到文档或任何有关如何同时编辑所有内容的信息。我也一直在阅读关于formtastic,没有运气:(

任何线索?!?!

1 个答案:

答案 0 :(得分:3)

我的猜测是,您最好先编写自定义视图,然后添加自定义操作。

以下是它的样子:

应用程序/管理/ settings.rb

ActiveAdmin.register Setting do
  ...
  # Add a link on the index page to go the edit all page
  action_item :only => :index do
    link_to 'Edit Settings', :action => :edit_settings
  end

  member_action :edit_settings do
    @settings = Setting.all
  end

  member_action :update_settings, :method => 'post' do
    params[:settings].each do |setting_params|
      setting = Setting.find(settings_params[:id]
      setting.key = settings_params[:key]
      setting.value = settings_params[:value]
      setting.save
    end
  end

  ...
end

应用程序/视图/管理/ edit_settings

<form action="/admin/update_settings" method="POST">
    <% @settings.each do |setting| %>
        <div>
            <input id="setting_id_<%= "#{setting.id}" %>" name="settings[][id]" value="<%= setting.key %>" type="hidden" />
            <div>
                <label for="setting_key_<%= "#{setting.id}" %>">Setting key</label>
                <input id="setting_key_<%= "#{setting.id}" %>" name="settings[][key]" value="<%= setting.key %>" type="text" />
            </div>
            <div>
                <label for="setting_value_<%= "#{setting.id}" %>">Setting value</label>
                <input id="setting_value_<%= "#{setting.id}" %>" name="settings[][value]" value="<%= setting.value %>" type="text" />
            </div>
        </div>
    <% end %>
    <input type="submit" value="Submit" />
</form>

请注意,可能有一种方法可以使用formtastic来编写此表单,但我发现有时候编写一些基本的html会更简单。