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])