Ответ 1
ActiveRecord::Enum
предоставляет области действия на основе его значений.
Просто попробуйте:
Conversation.active
или
Conversation.archived
Конечно, вы можете создать свои собственные области, как указано Kyle Decot.
Предположим, что у меня есть эта модель:
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.
ActiveRecord:: Enum предоставляет встроенные области действия на основе значений, поэтому вы можете просто:
Conversation.active
Conversation.archived
Это отлично работает:
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
Conversation.where(status: Conversation.statuses[:active])
Вы попробовали Conversation.where(status: [:active, :archived])
?
Как указано здесь.
попробуйте следующее:
.enum :status => {:active => "active", :archived => "archived"ok_off => "took off"}