虽然我在WHERE子句中使用相同的字符串,为什么我不会分页?

时间:2016-02-14 08:28:49

标签: ruby-on-rails will-paginate

我使用' 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'绝对相同!!!(因为我确认了数百次。)

为什么会这样?

2 个答案:

答案 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)