Подтвердить что ты не робот

В Rails 4.1, как найти записи с помощью символа перечисления?

Предположим, что у меня есть эта модель:

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

Как я могу найти все активные разговоры без использования числового значения перечисления или без необходимости повторения каждой беседы?

Я пробовал делать Conversation.where(status: :active), но это не дало никаких результатов.

Единственное решение - это перебрать все разговоры и выбрать активные, но это не похоже на хорошее решение.

Conversation.all.select {|conversation| conversation.active? }  

Что я могу с этим поделать?

4b9b3361

Ответ 1

ActiveRecord::Enum предоставляет области действия на основе его значений.

Просто попробуйте:

Conversation.active

или

Conversation.archived

Конечно, вы можете создать свои собственные области, как указано Kyle Decot.

Ответ 2

ActiveRecord:: Enum предоставляет встроенные области действия на основе значений, поэтому вы можете просто:

Conversation.active
Conversation.archived

Ответ 3

Это отлично работает:

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

Ответ 4

Conversation.where(status: Conversation.statuses[:active])

Ответ 5

Вы попробовали Conversation.where(status: [:active, :archived])? Как указано здесь.

Ответ 6

попробуйте следующее:

.enum :status => {:active => "active", :archived => "archived"ok_off => "took off"}