首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能分页,尽管我在WHERE子句中使用了相同的字符串?

为什么我不能分页,尽管我在WHERE子句中使用了相同的字符串?
EN

Stack Overflow用户
提问于 2016-02-14 16:28:49
回答 2查看 81关注 0票数 2

我使用'will-paginate‘gem来使用分页。下面的代码运行得很好。

代码语言:javascript
复制
@cafe = Cafe.where('id = 7 or id = 6 or id = 3 or id = 2 or id = 1').paginate(:page => params[:page], :per_page => 4)

但是,当我使用下面的代码时,

代码语言:javascript
复制
@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)

第一页有四个帖子,但当我点击第二页按钮时,出现了下面的错误消息:

代码语言:javascript
复制
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'绝对是一样的!(因为我已经确认了几百次了。)

这一切为什么要发生?

EN

回答 2

Stack Overflow用户

发布于 2016-02-14 16:38:02

看起来你的@caves_ids数组是空的。无论如何,我建议你使用下一个解决方案:

代码语言:javascript
复制
@cafe = Cafe.where(id: [7,6,3,2])

在本例中,数组为@caves_ids,但当数组为空时,不会出现语法错误。

票数 1
EN

Stack Overflow用户

发布于 2016-02-14 20:42:04

请尝试以下方法

代码语言:javascript
复制
@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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35389818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档