Вопрос по ruby, ruby-on-rails – Динамически получить атрибут объекта

10

Как динамически получить значение атрибута для объекта activerecord?

например у меня есть переменная с именемattr_name.
Я хочу сделать что-то вроде этого:

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

которыйfunction_name может быть использован ?

Ваш Ответ

3   ответа
25

person.attributes[attr_name] или жеperson.read_attribute(att_name)или даже короче этоperson[attr_name].

`` `class Foo def initialize @foo = 'foo name' @bar = 'bar name' end def foo @foo end end foo = Foo.new foo [: foo]` `` Nick Res
Это самый безопасный и правильный путь. Обратите внимание, что это будет работать только для атрибутов, но не для других методов или ассоциаций. Bert Goethals
Невозможно получить атрибуты или методы сobject[symbol or string] синтаксис. Создайте простой класс и сделайте некоторую переменную или метод общедоступными, используя сначала синтаксис с точкой, чтобы убедиться, что он работает, а затем попытайтесь получить к нему доступ через символ или строку. Nick Res
3

Отправить это метод, который вы ищете.

в зависимости от того, откуда берутся имена функций, это может быть довольно опасно, поэтому я бы этого не делал Bert Goethals
Если вы просто получаете значение атрибута динамически, то я бы определенно использовал что-то вроде[] или жеattributes[] или жеread_attribute, Это понятнее и менее опасно. Но, чтобы делать действительно динамичные вещи, вам понадобитсяsend. Joshua Pinter
1

Если делать это с помощьюsend

address = person.send("function_name" + "attr_name")
Если вы просто получаете значение атрибута динамически, то я бы определенно использовал что-то вроде[] или жеattributes[] или жеread_attribute, Это понятнее и менее опасно. Но, чтобы делать действительно динамичные вещи, вам понадобитсяsend. Joshua Pinter

Похожие вопросы