2013-05-31 54 views
0

我的产品型号属于电话,我想知道我将如何加入到一起的虚拟属性。我可以创建一个产品,并可以通过下面的代码找到或创建电话号码。如何编写虚拟属性的getter和setter方法?

Product < ActiveRecord::Base 
    attr_accessible :name, :telephone_number 
    belongs_to :telephone 

    def telephone_number 
    telephone.try(:number) 
    end 

    def telephone_number=(number) 
    self.telephone = Telephone.find_or_create_by_number(number) if number.pr.... 
    end 

现在对于getter方法我把:

def product_with_number 
    [name, telephone_number].join(',') 
    end 

但我不知道接下来会发生什么,或者如果这是我在获得。我试图做一个单场在那里我可以输入:

牛的牛肉干,555-323-1234

凡逗号方式隔开的产品名称和电话,如果电话号码是新的它会创建它。我在正确的轨道上,接下来是什么?

谢谢。

回答

1

你需要一个对应的setter:

def product_with_number=(str) 
    parts = str.split(',') 
    self.telephone_number = parts[0] 
    self.name = parts[1] 
end 

然后你会做是这样的:

@p = Product.New 
@p.product_with_number = "Cow's Beef Jerky, 555-323-1234" 
@p.save