rails how enum application ruby-on-rails ruby ruby-on-rails-4 rails-activerecord ruby-on-rails-4.1

ruby on rails - how - En Rails 4.1, ¿cómo encontrar registros por el símbolo enum?



how to use enum rails (6)

¿Has probado Conversation.where(status: [:active, :archived]) ? Como se detalla here .

Supongamos que tengo este modelo:

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

¿Cómo puedo encontrar todas las conversaciones activas sin usar el valor numérico de la enumeración o sin tener que iterar sobre cada conversación?

Intenté hacer Conversation.where(status: :active) , pero no produjo ningún resultado.

La única solución que se te viene a la mente es repetir todas las conversaciones y seleccionar las activas, pero no parece una buena solución.

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

¿Hay algo que pueda hacer al respecto?


Esto funciona genial:

Conversation.where("conversation.status = ?", Conversation.statuses[:active])

Por alguna razón, esto NO funciona:

Conversation.where(status: :active) #searches for NULL Conversation.where(status: ''active'') #searches for status=0 no matter what the enum

Actualizar

Todas las afirmaciones anteriores funcionan con Rails 5. Happy coding!


prueba esto:

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


ActiveRecord::Enum proporciona ámbitos integrados basados ​​en los valores para que pueda hacer lo siguiente:

Conversation.active Conversation.archived


ActiveRecord::Enum proporciona ámbitos basados ​​en sus valores.

Sólo inténtalo:

Conversation.active

o

Conversation.archived

Por supuesto, puedes crear tus propios ámbitos como menciona Kyle Decot .


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