ActiveAdmin分页链接已与scoped_collection group by一起消失

时间:2015-09-02 15:53:36

标签: ruby-on-rails ruby-on-rails-4 pagination activeadmin

我有以下ActiveAdmin模型:

ActiveAdmin.register Job do

  controller do
    def scoped_collection
      Job.all
    end
  end

这很好用,分页和链接。但是,我需要使用更复杂的查询来列出每个作业的作业视图计数。所以我将我的范围集合改为:

ActiveAdmin.register Job do

  controller do
    def scoped_collection
      Job.joins('left join jobView on job.Id = jobView.JobId')
            .select('job.Id, job.Title, job.CreatedDate, job.DeadLineDate, 
                 job.IsClosed, job.IsPublic, job.IsApproved, count(1) as totalViews')
            .group('job.Id, job.Title, job.CreatedDate, job.DeadLineDate, 
                 job.IsClosed, job.IsPublic, job.IsApproved')
    end
  end

第二部作品。但是分页链接不再显示了。我甚至可以看到分页本身有效,因为如果我在浏览器中插入一个查询字符串,例如'?page = 2'它正确地分页到第2页。唯一真正的问题是页面底部更改页面的缺失链接。

任何人都知道发生了什么?谢谢你们。

修改

我发现问题的发生是因为,如果您执行以下操作:

model = MyModel.select(field1, field2) 
model.count

model.count将中断,因为rails正在执行类似

的查询
select count(field1, field2) from MyModel

但是,count只接受1个参数。而ActiveAdmin分页可能会count

解决方案是使用size代替计数。但是如何在AA中改变这种行为?

编辑2 - 找到难看的解决方案

由于我在查询中使用左连接,因此行数始终等于左表计数。所以,我在我的索引控制器中对我的Job表进行了计数,然后我将这个计数传递给了我自己构建分页链接的部分:

/admin/job.rb:

 index do
    ...

    @jobsForPagination = Job.all.page(params[:page]).per(8) 
    render partial: "paginate", locals: {resource: @jobsForPagination}
  end

/views/admin/jobs/_paginate.html.erb:

<%= paginate resource %>

8是activeadmin config.per_page。

如果有人找到更好的解决方案或有任何意见,请回复。

谢谢!

0 个答案:

没有答案