Как использовать переменную в качестве атрибута объекта в рельсах? - PullRequest
13 голосов
/ 12 октября 2010

У меня есть модель PaymentDetail с атрибутом 'home_address_country', поэтому я могу использовать

    @payment_detail.home_address_country //where @payment_detail is object of that model.

Я хочу использовать что-то вроде этого: ---

country_attribute=address_type+"_address_country"  //where address type is equal to 'home'
 @payment_detail."#{country_attribute}" 

Имя атрибута средства хранится в переменной.Как я могу это сделать?

РЕДАКТИРОВАТЬ

country_attribute=address_type+"_address_country"
country_list=Carmen::country_names
eval("@#{country_attribute} = #{country_list}")

Ответы [ 2 ]

38 голосов
/ 12 октября 2010
  • Чтение AR-атрибут

    @payment_detail.send("#{address_type}_address_country")
    

    ИЛИ

    @payment_detail.read_attribute("#{address_type}_address_country")
    
  • Запись Атрибут AR

    @payment_detail.send("#{address_type}_address_country=", value)
    

    ИЛИ

    @payment_detail.write_attribute("#{address_type}_address_country", value)
    
  • Настройка переменная экземпляра

    @payment_detail.instance_variable_set("@#{address_type}_address_country", value)
    
  • Получение переменная экземпляра

    @payment_detail.instance_variable_get("@#{address_type}_address_country")
    

Ссылка

4 голосов
/ 19 июля 2013

Рекомендуемый способ для Rails 3 - использовать словарь-доступ :

attr = @payment_detail["#{address_type}_address_country"]
attr = "new value"
@payment_detail["#{address_type}_address_country"] = attr

read_attribute и write_attribute методы работают только для Rails 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...