【问题标题】:Activeadmin custom filter and scope for custom index records Rails 4自定义索引记录的 Activeadmin 自定义过滤器和范围 Rails 4
【发布时间】:2014-12-14 20:38:54
【问题描述】:

Active Admin 提供了在索引页面上显示的自定义过滤器和范围,如下所示:

我的管理 app/admin/compensatory_off.rb 代码是

ActiveAdmin.register CompensatoryOff do

scope :pending, default: true
scope :approved

filter :claim_date, collection: proc { CompensatoryOff.all.map(&:claim_date) }

My Controller for index action : 

controller do
  def index
    @page_title = "Comp-Off"
    index! do |format|
       if (current_user.has_role? :HRMS_Supervisor)
           @compensatory_offs = CompensatoryOff.get_subordinate_employees_comp_offs(current_user).page(params[:page]).per(10)
         else
           @compensatory_offs = current_user.employee.compensatory_offs.order("compensatory_offs.claim_date DESC").page(params[:page]).per(10) if current_user.employee
         end

         format.html {
           render "active_admin/resource/index"
         }
       end
     end
  end
end

我在上面的代码中同时使用了过滤器和作用域。

在我的模型中,我还定义了范围,

class CompensatoryOff < ActiveRecord::Base
  scope :pending, ->{where(status: "Pending Approval")}
  scope :approved, ->{where(status: "Approved")}

  #scope :claim_date_eq, -> (claim_date) {where(claim_date: claim_date)}
end 

但在上面的代码中,作用域和过滤器都不起作用。索引页没有显示所有记录。

注意:当我从控制器中删除我的自定义索引操作时,范围和过滤器都可以正常工作。

我的管理 app/admin/compensatory_off.rb 代码是

ActiveAdmin.register CompensatoryOff do

scope :pending, default: true
scope :approved

filter :claim_date, collection: proc { CompensatoryOff.all.map(&:claim_date) }

My Controller for index action : 

controller do
end

end

默认情况下如何获取索引操作资源,我想用我自己的条件覆盖索引资源。

任何需要通过索引操作添加的东西,

请任何帮助我实现这一目标,我正在努力寻找结果。

谢谢。

【问题讨论】:

    标签: activeadmin ruby-on-rails-4.1


    【解决方案1】:

    使用 scoped_collection 其工作,

    controller do
        def scoped_collection
          if (current_user.has_role? :HRMS_Supervisor)
            @leave_availed_details = LeaveAvailedDetail.get_subordinate_employees_leaves(current_user).page(params[:page]).per(10)
          else
            @leave_availed_details = current_user.employee.leave_availed_details.order("leave_availed_details.status DESC").page(params[:page]).per(10) if current_user.employee
          end
        end
    
        # def index
        #   #@page_title = "Leave Details"
        # end
    end 
    

    分页使用下面的代码。

    before_filter :only => :index do
          @per_page = 10
        end
    

    【讨论】:

      【解决方案2】:

      试试这个:

      def index
        if (current_user.has_role? :HRMS_Supervisor)
          @compensatory_offs = CompensatoryOff.get_subordinate_employees_comp_offs(current_user)
        else
          @compensatory_offs = current_user.employee.compensatory_offs.order("compensatory_offs.claim_date DESC") if current_user.employee
        end
      
        index!
      end
      

      分页将由 ActiveAdmin 处理

      【讨论】:

      • 这段代码给出了以下错误,未定义的局部变量或方法 `collection_before_scope' 用于 #<:views::scopes:0x007f3f82178180>
      • 是的,scoped_collection 是解决方案。
      • 只有当scoped_collection返回的集合是ActiveRecord::Relation(不是数组)时,分页才能工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      相关资源
      最近更新 更多