¿Cómo puedo obtener el atributo del objeto modelo dinámicamente? Tengo el atributo del objeto de usuario como cadena:obtener el atributo del modelo dinámicamente en los rieles 3
u = User.find(1)
¿Puedo hacer algo como u.get("user_id")
¿Cómo puedo obtener el atributo del objeto modelo dinámicamente? Tengo el atributo del objeto de usuario como cadena:obtener el atributo del modelo dinámicamente en los rieles 3
u = User.find(1)
¿Puedo hacer algo como u.get("user_id")
Puede intentar usar la instancia del modelo de ActiveRecord como un hash.
u = User.find(1)
name = u[:name]
field = "first_name"
first_name = u[field]
Esta es la manera de hacerlo. – Mario
+1 Este es el enfoque convencional cuando el nombre del atributo no se conoce de antemano. – MDaubs
Tenga en cuenta que esto solo funciona para los atributos que son columnas. No funciona para los atributos accesibles a través de attr_accessor. – cesoid
No estoy seguro si estoy totalmente de entender sus preguntas. Pruebe algo como:
User.find(1).name
si usted quiere decir que solamente se desea obtener de atributo específico DB que puede hacer:
User.find(1,:select => :name)
probar este
u = User.find(1)
attr = "first_name"
u.send(attr)
probar este
user = User.find(1)
entonces algo como esto debería hacer wh a usted requiere
user.send('field_name')
Al trabajar con atributos enum, esta es la única forma que he encontrado que devuelve el campo como una cadena en lugar de su valor entero sin formato. – justis
Sin embargo, otro enfoque:
attr = :first_name
@user.read_attribute attr
Creo que esta debería ser la respuesta correcta. – Starkers
No estoy totalmente la comprensión de esta cuestión. ¿Qué estás tratando de hacer exactamente? –
Siéntase libre de aceptar una respuesta de alguna a continuación si está contento? ¿No está cerca de lo que necesita? –
Si solo está hablando de objetos ActiveRecord (como en el ejemplo del código), probablemente debería ser más explícito al respecto en el título y la pregunta. (No me di cuenta de esto hasta que probé la respuesta.) La respuesta elegida que trata el modelo como un hash solo funciona para los objetos ActiveRecord y solo para los atributos que son columnas. – cesoid