Форма пользовательских настроек в ActiveAdmin

Я использую rails-settings от Squeegy из https://github.com/Squeegy/rails-settings. а также Activeadmin. То, что я пытаюсь сделать, это создать форму в ActiveAdmin, чтобы я мог позволить администратору сайта изменить настройки сайта, которые используют синтаксис командной строки:

Setting.foo = "bar"
Setting.site_title = "My Awesome Site!"
Setting.max_users = 35

Я действительно не думаю, что зашел слишком далеко, но я уже застрял. Я дошел до создания пользовательской формы ActiveAdmin:

ActiveAdmin.register_page "Settings" do
  action_item do
    link_to "View Site", "/"
  end


  content do
    form do |f|
      #Inputs for Settings 
    end
  end
end

Но я даже не знаю, как начать компоновку формы для прямого доступа к модели настроек или как создать собственный контроллер для обработки ввода. Я полагаю, если бы я мог отправить ввод на контроллер, который я мог бы сделать, я был бы в порядке.


person Kyle Macey    schedule 02.04.2012    source источник


Ответы (2)


Я не думаю, что вы хотите, чтобы форма вашего сайта напрямую меняла настройки в ActiveAdmin, я бы...

  1. Создайте новую таблицу, например. adminsettings и добавьте поля для каждой из настроек, которые вы хотите сохранить, например site_title, в качестве альтернативы вы можете использовать каждую строку для настройки, что означает, что вы можете добавлять новые настройки в будущем без изменения базы данных

  2. Соберите форму в Activeadmin для сохранения ваших настроек

  3. Добавьте несколько функций в свою модель, чтобы получить настройки, чтобы вы могли делать что-то вроде ..

    Setting.site_title = Настройка администратора.getsitetitle

Вы можете быть умнее со своим методом модели и использовать средство method_missing, поэтому вам нужно наименьшее количество кода, чтобы получить настройку...

class << self 
  def method_missing(method, *args, &block)
    setting = Adminsetting.where(:code => method.to_s).first
    if setting
      return setting.content
    else
      return super(method, *args, &block)
    end
 end

Возможно, вы могли бы упаковать это в Gem, так как это может быть полезно для других.

person creativetechnologist    schedule 02.04.2012

Это очень просто сделать с помощью ActiveAdmin. Допустим, ваш класс настроек — Settings :

ActiveAdmin.register_page "Settings" do
  content do
    table :class => 'settings' do
      thead do
        th 'Setting'
        th 'Value'
        th ''
      end
      Settings.all.each do |key, val|
        tr do
          td strong key
          td val
          td do
            link_to "delete", admin_settings_delete_path( :key => key ), :method => :post
          end
        end
      end
      tr do
        form :action => admin_settings_create_path, :method => :post do
          td do
            input :name => 'key'
          end
          td do
            input :name => 'val'
          end
          td do
            input :type => 'submit', :value => 'Add'
          end
        end
      end
    end
  end

  page_action :create, :method => :post do
    Settings[params[:key]] = params[:val]
    redirect_to :back, :notice => "#{params[:key]} added"
  end

  page_action :delete, :method => :post do
    Settings.destroy params[:key]
    redirect_to :back, :notice => "#{params[:key]} deleted"
  end
end

Конечно, вам нужно будет добавить немного CSS и, возможно, некоторые проверки, но у вас есть страница настроек.

Редактировать: обратите внимание, что я написал это для rails-settings-cached, а не rails-settings, но мой быстрый поиск привел сюда, поэтому я думаю, что это все еще может кому-то помочь.

person Jim    schedule 26.12.2013