簡體   English   中英

Activeadmin:在布爾字段上創建范圍

[英]Activeadmin: create scope on boolean field

在 activeadmin 控制器中,我想從我的索引中排除所有具有名為is_private的布爾字段設置為true

我不確定如何做到這一點。

下面的代碼讓我接近我想要的:

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

在此處輸入圖片說明

這會創建一個“公開”按鈕,我可以按下它來過濾掉所有私人照片。 但是,我希望這種過濾自動發生。 我不希望出現按鈕,並且希望默認情況下隱藏所有私人照片(對於某些用戶)。

如何在此布爾字段 (:is_private) 上范圍我的照片?

您想要的是設置默認過濾器,所以這里是您需要在 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

從您的代碼開始的最簡單的解決方案之一是將范圍設置為默認范圍:

scope ("public"){ |scope| scope.where(is_private: false) }, default: true

通過這種方式,您可以選擇列出所有照片對象或不同的范圍。

參考: Active Admin 文檔

您可以自定義資源檢索和默認范圍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

所以現在是您開始在此類情況下使用授權的好機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM