我试图找到id大于200的所有用户,但我在特定的语法上遇到了一些麻烦。

User.where(:id > 200) 

and

User.where("? > 200", :id) 

都失败了。

有什么建议吗?


当前回答

试试这个

User.where("id > ?", 200) 

其他回答

更好的用法是在用户模型中创建一个作用域(arel_table[:id].gt(id))

更新

Rails核心团队决定暂时恢复此更改,以便更详细地讨论它。更多信息请看这条评论和这篇PR。

我留下我的答案只是为了教育目的。


Rails 6.1中用于比较的新“语法”(已恢复)

Rails 6.1为where条件中的比较操作符添加了新的“语法”,例如:

Post.where('id >': 9)
Post.where('id >=': 9)
Post.where('id <': 3)
Post.where('id <=': 3)

所以您的查询可以改写如下:

User.where('id >': 200) 

这里是PR的链接,在那里你可以找到更多的例子。

对于Ruby 2.6可以接受如下范围:

# => 2.6
User.where(id: 201..)
# < 2.6
User.where(id: 201..Float::INFINITY)

试试这个

User.where("id > ?", 200) 

如果你想要一个更直观的写作,它有一个叫squeel的宝石,可以让你像这样写指令:

User.where{id > 200}

注意括号字符{}和id只是一个文本。

你所要做的就是在你的Gemfile中添加squeel:

gem "squeel"

在用Ruby编写复杂的SQL语句时,这可能会大大简化您的工作。