【问题标题】:Attributes of attributes in a Rails modelRails 模型中的属性
【发布时间】:2013-04-15 19:54:33
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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!
    

    它们可以通过电话哈希访问:

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

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

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

    迁移将是:

    rails g migration add_phones_to_contact phones:text
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多