私はこのモデルを持っていると仮定します:
_class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
_
列挙型の数値を使用せずに、または各会話を反復することなく、すべてのアクティブな会話を見つけるにはどうすればよいですか?
Conversation.where(status: :active)
を実行しようとしましたが、結果が得られませんでした。
頭に浮かぶ唯一の解決策は、すべての会話を反復してアクティブな会話を選択することですが、それは良い解決策には見えません。
_Conversation.all.select {|conversation| conversation.active? }
_
これについて何かできることはありますか?
ActiveRecord::Enum
は、その値に基づいてスコープを提供します。
ちょうど試して:
Conversation.active
または
Conversation.archived
もちろん、 Kyle Decot 前述のように、独自のスコープを作成できます。
これはうまく機能します:
Conversation.where("conversation.status = ?", Conversation.statuses[:active])
何らかの理由でこれは機能しません:
Conversation.where(status: :active) #searches for NULL
Conversation.where(status: 'active') #searches for status=0 no matter what the enum
上記のすべてのステートメントは、Rails 5.幸せなコーディング!
ActiveRecord :: Enum は、値に基づいて組み込みスコープを提供するため、次のことが簡単にできます。
Conversation.active
Conversation.archived
Conversation.where(status: Conversation.statuses[:active])
Conversation.where(status: [:active, :archived])
を試しましたか?リストされているとおり here 。