如何在Rails中对整数属性执行匹配查询

时间:2014-05-22 17:42:03

标签: mysql ruby-on-rails arel

如果我有一个带有id(整数)的用户表,我尝试使用arel构建一个sql查询,我就明白了。

users  = Arel::Table.new(:users)
users.where(users[:id].matches("foo")).to_sql #=> "SELECT FROM `users`  WHERE `users`.`id` LIKE 0"

我需要生成这个sql:

"SELECT FROM `users`  WHERE `users`.`id` LIKE 'foo'"

我觉得那里有某种不必要的类型铸造的地方。

更新

我终于通过使用Arel :: Nodes :: SqlLiteral类的实例解决了这个问题。

str = Arel::Nodes::SqlLiteral.new("'foo'")
users.where(users[:id].matches(str)).to_sql #=> "SELECT FROM `users`  WHERE `users`.`id` LIKE 'foo'"

1 个答案:

答案 0 :(得分:0)

这是因为您尝试在INT类型列上构建查询。因此,Rails试图转换' foo'到Integer0

以下将为列的正确数据类型生成预期查询:

users.where(users[:name].matches("foo")).to_sql #=> "SELECT FROM `users`  WHERE `users`.`name` LIKE 'foo'"

所以,在你的情况下,你应该尝试这样的事情:

users.where(users[:id].matches(1)).to_sql #=> "SELECT FROM `users`  WHERE `users`.`id` LIKE 1"

我希望它有所帮助。