Ruby on rails Rails模型中属性的属性

Ruby on rails Rails模型中属性的属性,ruby-on-rails,Ruby On Rails,我正在制作一个带有联系人资源、地址、状态和zip字段的Rails应用程序。还有一些字段供用户输入电话号码。在另一个网站的表单上,用户可以指出手机是移动的、家庭的还是办公室的,换句话说,就是电话号码的类型。我想知道是否可以创建字段来接受模型上其他字段的更多信息,或者,在本例中,Phone是否应该是一个单独的模型(例如,Contact has_many:phones),并且电话号码的类型作为电话模型上的常规字段 因为在我的应用程序中,一个用户有一个联系人,我宁愿在联系人模型中保留所有与电话相关的信息

我正在制作一个带有联系人资源、地址、状态和zip字段的Rails应用程序。还有一些字段供用户输入电话号码。在另一个网站的表单上,用户可以指出手机是移动的、家庭的还是办公室的,换句话说,就是电话号码的类型。我想知道是否可以创建字段来接受模型上其他字段的更多信息,或者,在本例中,Phone是否应该是一个单独的模型(例如,Contact has_many:phones),并且电话号码的类型作为电话模型上的常规字段


因为在我的应用程序中,一个用户有一个联系人,我宁愿在联系人模型中保留所有与电话相关的信息,而不是让用户有一个联系人,联系人有多个:电话

使用另一个模型是实现这一点的一种选择。另一种方法是创建一个存储电话号码的散列

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!
而且可以通过电话访问:

contact.phone[:home] # => "1234-1234"
通过在模型上提供
serialize
命令,
ActiveRecord
将其序列化以存储在数据库中

因此,它允许您将数组或散列存储到数据库中,前提是您在其表上创建一个
text
字段

迁移将是:

rails g migration add_phones_to_contact phones:text
有关序列化的详细信息: