如何编写虚拟属性的getter和setter方法?

时间:2013-05-31 15:26:56

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

我的产品型号属于电话,我想知道如何将虚拟属性加在一起。我可以创建一个产品,可以使用下面的代码通过它的号码查找或创建电话。

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

但是我不确定接下来会发生什么,或者这是不是我正在接受的。我正在尝试创建一个可以输入的字段:

Cow's Beef Jerky,555-323-1234

如果逗号分隔产品名称和电话,如果电话号码是新的,则会创建它。我是在正确的轨道上,下一步是什么?

感谢。

1 个答案:

答案 0 :(得分: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