Подтвердить что ты не робот

Две страницы для одного и того же ресурса - ActiveAdmin

В настоящее время у меня есть модель User, которая зарегистрирована в user.rb как новый ресурс для ActiveAdmin. Сгенерированная страница отображает всех пользователей с областями (all/journalists/startup_employees). Теперь я хочу создать другую страницу для того же ресурса и тех же областей, но должны быть только записи с полем waiting, установленным на true (и предыдущая страница должна отображать только это с помощью :waiting => false). Как я мог это сделать? Я знаю, что могу сделать это с помощью фильтров, но мне нужны две отдельные страницы с двумя ссылками в меню.

//РЕШЕНИЕ

Это было даже проще, чем советы (спасибо, ребята!):

ActiveAdmin.register User, :as => 'Waitlist User' do
  menu :label => "Waitlist"

  controller do
    def scoped_collection
      User.where(:waitlist => true)
    end
  end

  # code

  scope :all
  scope :journalists
  scope :startup_employees
end

ActiveAdmin.register User do
  controller do
    def scoped_collection
      User.where(:waitlist => false)
    end
  end

  # code

  scope :all
  scope :journalists
  scope :startup_employees
end
4b9b3361

Ответ 1

STI (Наследование отдельных таблиц) можно использовать для создания нескольких "под-ресурсов" одной и той же модели table/parent в Active admin

  • Добавить столбец "type" в таблице пользователя в виде строки

  • Добавьте это в модель User для отображения поля ожидания с полем типа

    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting" )}
    
  • Создайте новые модели UserWaiting и UserNotWaiting

    class UserWaiting < User
    end
    class UserNotWaiting < User
    end
    
  • Создать Active admin ресурсы

    ActiveAdmin.register UserWaiting do
    # ....
    end
    ActiveAdmin.register UserNotWaiting do
    # ....
    end
    
  • Вы можете запустить синхронизацию в первый раз на консоли

    User.all.each {|user| user.save}
    

..............

Другим способом может быть пропустить столбец типа (шаги 1,2 и 5) и решить остальные с помощью областей.

  • Шаг 3 и 4 выше

  • Затем создайте области действия

    #model/user.rb
    scope :waiting, where(:waiting => true)
    scope :not_waiting, where(:waiting => false)
    
  • Области в Active admin

    #admin/user.rb
    scope :waiting, :default => true
    
    #admin/user_not_waitings.rb
    scope :not_waiting, :default => true
    

Просто убедитесь, что другие области на этих двух страницах также отфильтрованы в ожидании/not_waiting

Ответ 2

вы можете использовать параметр, чтобы отличать случаи и выполнять разные действия в зависимости от параметра:

link_to users_path(:kind => 'waiting')

и в users_controller.rb

def index
  if params[:kind]=='waiting'
    @users= Users.where(:waiting => true)
    render :action => 'waiting' and return
  else
    # do your other stuff
  end
end

затем поместите свою новую, другую страницу (частичную) в app/views/users/waiting.html.erb

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

render :action => 'waiting', :layout => 'other_layout' and return