2012-08-04 7 views

Respuesta

58

Todo esto debe trabajar:

user[attribute_name] 
user.read_attribute(attribute_name) 
user.send(attribute_name) 

Personalmente no usaría send en este caso. Cuando esté disponible, prefiera public_send para enviar

+0

Estoy de acuerdo en que es mejor para evitar 'send'. Sin embargo, si está accediendo a una asociación en lugar de un atributo simple, parece que 'enviar' es su mejor opción. – lime

+0

¿Puede decirme por qué debo evitar 'enviar'? Me temo que tengo que usarlo. – jmarceli

+1

@ user2041318 con el envío debe asegurarse de que se le ha pasado un nombre de atributo real (en lugar de, por ejemplo, 'destroy') –

1

Puede usar [] o pero they are not equivalent. El método de acceso más seguro está utilizando el método [] method porque generará un error ActiveModel::MissingAttributeError si el atributo no existe. El read_attribute method devuelve nil si el atributo no existe.

+1

El [método read_attribute aún está presente en ActiveRecord 5] (http://api.rubyonrails.org/classes /ActiveRecord/AttributeMethods/Read.html#method-i-read_attribute) y no puedo encontrar ninguna pista sobre que esté en desuso. – rkallensee

+0

Lea [esta página de APIdock] (http://apidock.com/rails/ActiveRecord/AttributeMethods/read_attribute) que indica lo siguiente: _ "Este método está en desuso o se ha movido en la última versión estable. La última versión existente (v2. 3.8) se muestra aquí. "_ –

+3

Se acaba de mover al módulo' ActiveRecord :: AttributeMethods :: Read' y todavía está presente. – rkallensee

0

En los carriles 5, justo attribute_name = "name" obras

Cuestiones relacionadas