2016-11-17 6 views
3

私のRoomモデルでは、配列として格納されているavailable_daysという名前の属性があります。例えば配列の長さが-Rails 4のレコードを検索します。

Room.first.available_days 
=> ["wed", "thurs", "fri"] 

配列のサイズは3に等しいすべての部屋を見つけるための最善の方法は何ですか?

ノー成功と

Room.where('LENGTH(available_days) = ?', 3) 

のようなものを試してみました。

更新:available_daysのデータ型は文字列ですが、配列を格納するために、私は私のモデルから属性をシリアライズしています:

アプリ/モデル/ room.rb

serialize :available_days 
+0

スキーマを変更できますか? 'serialize'を使うことは、ほとんど常に恐ろしい間違いです。あなたの顔に素早く簡単に始まり、あなたの顔を爆破します。 –

答えて

0

sqliteのために純粋にsqlの方法を考えることはできません。available_daysstringです。

ただし、すべてのレコードを一度にロードせずに実行する方法の1つです。

rooms = [] 
Room.in_batches(of: 10).each_record do |r| 
    rooms << r if r.available_days.length == 3 
end 

p rooms 
+0

助けてくれてありがとう。例外を取得する: 'そのような機能はない:カーディナリティ' @Rashmirathi – Kathan

+0

@Kathanどのデータベースを使用していますか?私はあなたがポストグルを使用していると仮定しました。また、 'available_days'のデータ型は何ですか? – Rashmirathi

+0

開発者用Sqlite3 'available_days'は文字列ですが、配列を格納するためにはそれをシリアル化しています。 @Rashmirathi – Kathan

関連する問題