0

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

因为在我的应用程序中有一个 User has_one Contact,我宁愿将所有电话相关信息保留在 Contact 模型中,而不是 User has_one Contact 和 Contact has_many :phones。

4

1 回答 1

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

于 2013-04-22T19:43:34.510 回答