我使用' will-paginate'宝石使用分页。 以下代码效果很好。
@cafe = Cafe.where('id = 7 or id = 6 or id = 3 or id = 2 or id = 1').paginate(:page => params[:page], :per_page => 4)
但是,当我使用下面的代码时,
@caves_ids = @caves.collect(&:id)
@sql = 'id = '+@caves_ids[0].to_s
for i in 1..@caves_ids.size-1
@sql += ' or id = '+@caves_ids[i].to_s
end
@cafe = Cafe.where(@sql).paginate(:page => params[:page], :per_page => 4)
第一页有四篇帖子说得好,但当我点击第2页按钮时,会出现以下错误消息:
SQLite3::SQLException: near ")": syntax error: SELECT "caves".* FROM "caves" WHERE (id = ) LIMIT 4 OFFSET 4
@sql
和'id = 7 or id = 6 or id = 3 or id = 2 or id = 1'
绝对相同!!!(因为我确认了数百次。)
为什么会这样?
答案 0 :(得分:1)
您的@caves_ids
数组似乎是空的。
无论如何,我建议你使用下一个解决方案:
@cafe = Cafe.where(id: [7,6,3,2])
在你的情况下,数组是@caves_ids
,但是当它为空时,你不会出现语法错误。
答案 1 :(得分:0)
尝试以下方式
@caves_ids = @caves.pluck(:id)
@caves_ids.count.each do |id|
@sql=@sql+' or id='+id.to_s
end
@cafe = Cafe.where(@sql).paginate(:page=>params[:page],:per_page => 4)