Форма пользовательских настроек в ActiveAdmin - PullRequest
0 голосов
/ 02 апреля 2012

Я использую 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

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

Ответы [ 2 ]

2 голосов
/ 26 декабря 2013

Это очень просто сделать с ActiveAdmin.Допустим, ваш класс настроек - «Настройки»:

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, но мой быстрый поиск привел сюда, так что я думаю, что это все еще может кому-то помочь.

1 голос
/ 02 апреля 2012

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

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

  2. Соберите форму в Activeadmin, чтобы сохранить ваши настройки

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

    Настройка.site_title = Adminsetting.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

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

...