我有以下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。
如果有人找到更好的解决方案或有任何意见,请回复。
谢谢!