Userというモデルがあるとします。それには趣味があります。.whereで配列を使用してモデルを検索するにはどうすればよいですか?
user = User.first
user.hobbies
=> ["Bowling", "Cooking", "Knitting"]
:hobbies属性を検索する場合はどうすればよいですか?私は、PostgreSQLを使用しています、と
:hobbies, :text, array:true
User.whereは(趣味は: "私はここに入れたものは、文字列配列、ハッシュ")は、あなたがpostgres_ext
からcontains
またはoverlap
を試みるかもしれ
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
これらのどれかが 'どこの趣味( 'Bowling'、 'Cooking'、 'Knitting')'に翻訳されますか? 'Cosは最適なクエリです。 –
'COUNT'は配列の長さを教えてくれませんが、集計クエリでロールアップする*行*の数を示します。それで、配列の長さにかかわらず、まだ1行しか残っていなくても、常にあなたに1を与えているのです。おそらく 'array_length(hobbies、1)'が必要です。しかし、私はあなたがしようとしていることを実際には分かっていないので、私は間違った道にいる可能性があります。 –
ここで 'IN'を使うことができないのは、' hobbies'が文字列ではなく文字列の配列であるからです。ですから、代わりに配列演算子を使うべきです。 '@>は、'趣味 'には 'ボウリング'、 '料理'、 '編み物'があることを意味します。 '&&'は、少なくとも1つを持つことを意味します。 –