Rails模型中属性的属性

时间:2013-04-22 19:27:37

标签: ruby-on-rails

我正在使用Contact资源创建一个Rails应用程序,其中包含地址,状态和zip字段。还有用户可以输入电话号码的字段。在我用于获取灵感的另一个网站的表格上,用户可以指出手机是移动电话,家庭电话还是办公室电话,换句话说就是电话号码的类型。我想知道是否可以创建接受模型上其他字段的更多信息的字段,或者在这种情况下,电话应该是一个单独的模型(例如,联系has_many:电话),电话号码的类型是手机型号上的常规字段。

因为在我的应用中,用户has_one联系人,我宁愿将所有与手机相关的信息保存在联系人模型中,而不是让用户有__联系人,而是联系has_many:手机。

1 个答案:

答案 0 :(得分:1)

使用其他模型是实现此目的的选项。另一个是创建一个存储电话号码的哈希。

class Contact
  attr_accessible :phones
  serialize :phones, Hash
end

然后你可以将每部手机存放在适当的密钥中,例如

contact = Contact.new
contact.phones = {home: '1234-1234', work: '1234-5678', mobile: '9876-5432'}
contact.save!

他们可以通过电话Hash访问:

contact.phone[:home] # => "1234-1234"

通过在模型上提供serialize命令,ActiveRecord将其序列化以便存储在数据库中。

因此,如果您在其表格上创建text字段,它允许您将数组或哈希值存储到数据库中。

迁移将是:

rails g migration add_phones_to_contact phones:text

有关序列化的更多信息:api.rubyonrails.org/classes/ActiveRecord/Base.html