Activeadmin:在布尔字段上创建范围

时间:2015-10-24 03:06:23

标签: ruby-on-rails ruby activeadmin

在activeadmin控制器中,我想从索引中排除所有名为is_private的布尔字段设置为true的照片。

我不确定该怎么做。

下面的代码让我接近我想要的东西:

ActiveAdmin.register Photo do
 scope ("public"){ |scope| scope.where(is_private: false) } 

enter image description here

这会创建一个“公共”按钮,我可以按此按钮来过滤掉所有私人照片。但是,我希望这种过滤自动发生。我不希望出现按钮,我希望默认情况下隐藏所有私人照片(对于某些用户)。

如何在这个布尔字段(:is_private)上调整我的照片范围?

3 个答案:

答案 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对象或不同的范围。

参考:Active Admin docs

答案 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为您提供了开箱即用的punditcancan等内容的集成

http://activeadmin.info/docs/13-authorization-adapter.html#using-the-cancan-adapter

http://activeadmin.info/docs/13-authorization-adapter.html#using-the-pundit-adapter

所以现在很有可能开始使用这种情况的授权。