Activeadmin自定义过滤器和自定义索引记录的范围Rails 4

时间:2014-10-19 22:02:42

标签: activeadmin ruby-on-rails-4.1

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

使用 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

答案 1 :(得分:1)

试试这个:

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处理