在activeadmin控制器中,我想从索引中排除所有名为is_private
的布尔字段设置为true
的照片。
我不确定该怎么做。
下面的代码让我接近我想要的东西:
ActiveAdmin.register Photo do
scope ("public"){ |scope| scope.where(is_private: false) }
这会创建一个“公共”按钮,我可以按此按钮来过滤掉所有私人照片。但是,我希望这种过滤自动发生。我不希望出现按钮,我希望默认情况下隐藏所有私人照片(对于某些用户)。
如何在这个布尔字段(:is_private)上调整我的照片范围?
答案 0 :(得分:2)
您想要的是设置默认过滤器,以便您在ActiveAdmin控制器中需要执行此操作
controller do
before_filter only: :index do
params[:q] = {is_private_eq: 0} if params[:commit].blank?
# or this might work for you
# params[:q] = {is_private: 0} if params[:commit].blank?
end
end
答案 1 :(得分:0)
从代码开始的最简单的解决方案之一是将范围设置为默认范围:
scope ("public"){ |scope| scope.where(is_private: false) }, default: true
通过这个你可以选择列出所有Photo对象或不同的范围。
答案 2 :(得分:0)
您可以自定义资源检索和默认范围 http://activeadmin.info/docs/2-resource-customization.html 所以我建议下一步
ActiveAdmin.register Photo do
controller do
def scoped_collection
super.where(is_private: false)
end
end
end
这会隐藏所有用户的私密照片。
您还可以向scoped_collection
controller do
def scoped_collection
if user.super_admin?
super
else
super.where(is_private: false)
end
end
end
同样,ActiveAdmin为您提供了开箱即用的pundit
和cancan
等内容的集成
http://activeadmin.info/docs/13-authorization-adapter.html#using-the-cancan-adapter
http://activeadmin.info/docs/13-authorization-adapter.html#using-the-pundit-adapter
所以现在很有可能开始使用这种情况的授权。