从ActiveRecord实例中访问RoR ActiveRecord的属性

时间:2010-10-15 21:35:39

标签: ruby-on-rails ruby ruby-on-rails-3

我对如何从ActiveRecord实例中的方法访问ActiveRecord实例的属性感到困惑。

例如,我有一个继承自ActiveRecord的Lead类:

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

我在Lead类的方法中使用send在内部设置这些属性,如下所示:

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

我的问题是如何在ActiveRecord实例本身内访问这些:phone_1,:phone_2属性,而不必使用send,这是我能想到的唯一方法。我认为这些属性是通过method_missing从公共接口访问它们时访问的,如下所示:

puts lead.phone_1

但我不知道除了via send之外,如何从ActiveRecord实例中访问它们。

有可能吗?

2 个答案:

答案 0 :(得分:3)

您可以直接从任何AR实例中引用AR属性。不需要任何“发送”魔法:

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

除此之外你还能相信什么?

如果您需要绕过AR的内置访问器,可以使用read_attribute和write_attribute。

答案 1 :(得分:0)

您可以使用self.phone1self.phone2 /例如:

class Lead < ActiveRecord::Base

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

end
相关问题