1

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')Rails 5.1:クエリが複数の値を検索しない場所に配列を渡す

が変わりましたか?古い行動を維持するための方法はありますか? 5.1.3では、この機能が変更されたことを示唆していません。 http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-where

ありがとう!

+0

どの種類の列がジャンルですか? –

+0

引用符が 'SELECT'ステートメントでどのようにエスケープされているかに基づいて、' ["mystery"、 "romance"] ''のような文字列を' ["mystery"ロマンス "]。 'where'に渡されているものの' class'を確認できますか? – cschroed

答えて

0

更新:私の問題が見つかりました!先日Robertさんの質問のおかげで、genreがDBに文字列として保存されていますが、Genreオブジェクトとして使用されているため、私の問題が分かりました。以前はserialize :genre Genreを使用していましたが、何らかの理由でwhere句で適切な値を正しく使用していませんでした。

新しいGenreType < ActiveRecord::Typeを作成し、attribute :genre GenreType.newとvoilaを追加しました!

http://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html

関連する問題