2012-02-28 15 views
8
del objeto

¿Cómo obtengo dinámicamente un valor de atributo para un objeto activerecord?Obtener dinámicamente el atributo

por ejemplo Tengo una variable llamada attr_name.
quiero hacer algo como esto:

person = Person.find(1) 
attr_name = "address" 
address = person.<function_name>(attr_name) 

cuales function_name se pueden utilizar?

Respuesta

3

send es el método que está buscando.

+4

dependiendo donde los nombres de función viene, esto podría ser muy peligroso, así que no lo haría –

22

O usa person.attributes[attr_name] o person.read_attribute(att_name), o incluso más corto que este es person[attr_name].

+3

Esta es la forma más segura y correcta. Tenga en cuenta que esto solo funcionará para los atributos, no para otros métodos o asociaciones. –

+0

No se pueden obtener atributos o métodos con la sintaxis 'object [symbol or string]'. Cree una clase simple y haga que alguna variable o método sea públicamente accesible con la sintaxis de punto primero para ver si funciona, luego intente acceder a ella a través de un símbolo o una cadena. No worky. –

+0

'' ' Foo clase inicializar def @foo = 'nombre foo' @bar = 'nombre de la barra' extremo foo def @foo extremo extremo foo = Foo.new foo [: foo] '' ' –

1

Si al hacer esto utilizando send

address = person.send("function_name" + "attr_name") 
Cuestiones relacionadas