我正在尝试按以下方式做点什么:
if start_date?
query = where("datetime > :start_date", :start_date => start_date)
end
if end_date?
query = where("datetime <= :end_date", :end_date => end_date)
end
if client
query = where("client.name LIKE :client", :client => client)
end
if staff
query = where("staff.name LIKE :staff", :staff => staff)
end
paginate :per_page => 20, :page => page,
:conditions => query,
:order => 'datetime'
我找不到任何关于如何构建查询并将其与paginate插件一起使用的示例。当然查询不正确,因为我必须弄清楚如何进行连接,以便我可以查询其他表中的其他属性,但除此之外,如何构建查询以在条件中使用?
答案 0 :(得分:4)
你想把.paginate
调用放在调用链的末尾,就像这样(所有一行,为了便于阅读而分开)
SomeClass.where("datetime > :start_date", :start_date=>start_date).
where("datetime < :end_date", :end_date=>end_date).
paginate(:per_page=>20,:page=>page)
如果您想有条件地添加条件,您也可以这样做,例如:
x = SomeClass
x = x.where("datetime > :start_date", :start_date=>start_date) if start_date
x = x.where("datetime < :end_date", :end_date=>end_date) if end_date
x.paginate(:per_page=>20,:page=>page)
答案 1 :(得分:1)
如果你安装了 kaminari gem,你可以试试这个:
ModelName.where( your_query ).page(params[:page]).per(50)
答案 2 :(得分:0)
.where()返回ActiveRecord :: Relation
.paginate()的:conditions参数必须是一个条件数组,好像它是.where()的参数。
您应该将代码修改为下一个:
if start_date?
query = ["datetime > :start_date", :start_date => start_date]
end
等
答案 3 :(得分:0)
ActiveRecord Relation 没有分页方法