目前我有 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
最佳答案
STI( 单表继承 )可用于创建同一 的多个“子资源”表/父 模型在 Active admin
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)并使用范围解决其余部分。
#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 上过滤
关于ruby-on-rails - 同一资源的两个页面 - ActiveAdmin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546502/