两页对同一资源 - ActiveAdmin(Two pages for the same reso

2019-09-03 03:56发布

目前,我有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

Answer 1:

STI( 单表继承 )可用于在同一表/父模型的创建多个“子资源” Active admin

  1. 在用户表中添加一个“类型”列作为一个字符串

  2. 这种添加到User模式,镜像等领域与类型字段

     after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting" )} 
  3. 创建新车型UserWaitingUserNotWaiting

     class UserWaiting < User end class UserNotWaiting < User end 
  4. 创建Active Admin资源

     ActiveAdmin.register UserWaiting do # .... end ActiveAdmin.register UserNotWaiting do # .... end 
  5. 您可以运行在控制台首次同步

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

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

另一种方式可以是跳过类型列(步骤1,2和5)和解决所有其他具有作用域。

  1. 步骤3和4上方

  2. 然后创建范围

     #model/user.rb scope :waiting, where(:waiting => true) scope :not_waiting, where(:waiting => false) 
  3. 在斯科普斯Active Admin

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

只要确保在这两个页面的其他范围也被过滤在等待/ not_waiting



Answer 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

然后把你的新的,不同的页面(部分)在应用程序/视图/用户/ waiting.html.erb

如果你想使用一个不同的布局此页面中添加布局参数来呈现:

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


文章来源: Two pages for the same resource - ActiveAdmin