2010-10-15 56 views
1

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

例如我有一个铅类,从ActiveRecord的继承:我有以下按比例缩小的迁移文件,显示了一个ActiveRecord表的列

class Lead < ActiveRecord::Base 
end 

:我使用

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类的方法以在内部设置这些属性,如下所示:

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 

但我不知道如何从ActiveRecord的实例中除了通过发送访问它们。

可能吗?

回答

3

您可以参考AR直接从任何AR实例内的属性。不需要任何'发送'魔法:

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

什么导致你相信否则?

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

+0

它是漫长的一天。我想我需要把笔记本电脑带走:-) – dagda1 2010-10-15 21:58:21

+1

你和我都是兄弟。现在走出去...... – 2010-10-15 21:59:12

+1

对我来说,没有“自我”的任务没有奏效。 – user331471 2013-01-08 08:03:58

0

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

class Lead < ActiveRecord::Base 

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

end