Ruby on rails 关于Rails 3中的查询方法和条件

Ruby on rails 关于Rails 3中的查询方法和条件,ruby-on-rails,Ruby On Rails,散列方式工作正常: drummers = Drummer.where(:gender => true) => [#<Drummer id: 1, first_name: "Bernard", middle_name: nil, second_name: "Purdie", nick_name: "Pretty Purdie", gender: true, created_at: "2010-12-05 02:47:56", updated_at: "2010-12-05 02

散列方式工作正常:

drummers = Drummer.where(:gender => true)

=> [#<Drummer id: 1, first_name: "Bernard", middle_name: nil, second_name: "Purdie", nick_name: "Pretty Purdie", gender: true, created_at: "2010-12-05 02:47:56", updated_at: "2010-12-05 02:50:42">]
我得到以下错误:
A
activeRecord::StatementInvalid:SQLite3::SQLException:无此类列:TRUE:从“鼓手”中选择“鼓手”。*其中(性别=TRUE)


任何人都可以告诉我为什么?

这是sqlite错误,而不是rails。当你说
gender=true
时,它正在寻找一个名为
true
的列。Sqlite没有布尔值,因此正确的方法是使用Drummer。其中(“gender=1”)

您应该尽可能避免在Arel查询中使用字符串

如果要加入一个表,该表还包含一个名为“gender”的字段,则该字段将中断,因为它是不明确的。使用
where(:gender=>true)
将自动为您命名,因此不会发生这种情况

正如您的示例所示,如果您使用的是后端不支持的功能,那么使用字符串也会造成可移植性问题

我一直在使用一个名为ARel的插件来增强ARel的语法,减少了字符串的必要性

drummers = Drummer.where("gender = true")