Доступ к атрибутам RoR ActiveRecord из экземпляра ActiveRecord - PullRequest
1 голос
/ 16 октября 2010

Я не понимаю, как получить доступ к атрибутам экземпляра ActiveRecord из метода в экземпляре ActiveRecord.

Например, у меня есть класс Lead, который наследуется от ActiveRecord:

class Lead < ActiveRecord::Base
end

У меня есть следующий уменьшенный файл миграции, в котором показаны столбцы таблицы ActiveRecord:

class CreateLeads < ActiveRecord::Migration
  def self.up
    create_table :leads do |t|
      t.string :phone_1
      t.string :phone_2
      t.string :web
      t.string :fax
      t.timestamps
    end
  end
  def self.down
    drop_table :leads
  end
end

Я использую метод send в классе Lead для внутренней установки этих атрибутов следующим образом:

def instance_method(prop)
  self.send("#{prop}=".to_sym, value_node.text) 
end

У меня вопрос: как мне получить доступ к этим атрибутам: phone_1,: phone_2 внутри самого экземпляра ActiveRecord без необходимости использовать send, и это единственный способ, который я могу себе представить. Я думаю, что эти атрибуты доступны через method_missing при доступе к ним из общедоступного интерфейса, например:

puts lead.phone_1

Но я понятия не имею, как получить к ним доступ из экземпляра ActiveRecord, кроме как через send.

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 16 октября 2010

Вы можете ссылаться на атрибуты AR напрямую из любого экземпляра AR. Нет необходимости в магии «отправить»:

def some_method
 self.some_attribute='value' # with or without self
 x = some_attribute
end

Что заставило вас поверить в обратное?

Если вам нужно обойти встроенные средства доступа AR, вы можете использовать read_attribute и write_attribute.

0 голосов
/ 16 октября 2010

Вы можете просто использовать self.phone1 или self.phone2 / Например:

class Lead < ActiveRecord::Base

  def some_instance_method
    self.phone1 = '1234567'
    self.phone2 = self.phone1
  end

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