我正在将我的 Rails 应用程序升级到 5.1.x。
我注意到,当我尝试查询时,例如:
Book.where(genre: ['mystery', 'romance']).count
,
生成的SQL是
SELECT COUNT(*) FROM "books"WHERE "books"."genre"= $1 [["genre", "[\"mystery\",\"romance\"]"]]
而不是你所期望的:
SELECT COUNT(*) FROM "books"WHERE "books"."genre"IN ('mystery', 'romance')
有什么变化?有什么方法可以保持旧的行为吗? 5.1.3 并不表示此功能已更改: http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-where
谢谢!
最佳答案
更新:发现我的问题!感谢罗伯特前几天的问题,我意识到我的问题是因为 genre
作为字符串保存到数据库中,但用作 Genre
目的。以前,我一直在使用 serialize :genre Genre
, 但出于某种原因,它没有在 where 子句中正确使用正确的值。
我创建了一个新的 GenreType < ActiveRecord::Type
并添加了 attribute :genre GenreType.new
瞧!
http://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html
关于ruby-on-rails - rails 5.1 : Passing in array to where query does not search across multiple values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892212/