0

アドレス、状態、および zip フィールドを使用して、連絡先リソースを使用して Rails アプリを作成しています。ユーザーが電話番号を入力するためのフィールドもあります。私がインスピレーションのために使用している別の Web サイトのフォームでは、ユーザーは電話が携帯電話、自宅、オフィスのいずれであるか、つまり電話番号の種類を示すことができます。モデルの他のフィールドに関するより多くの情報を受け入れるフィールドを作成することが可能かどうか、またはこの場合、電話は別のモデル (たとえば、Contact has_many :phones) であり、電話番号のタイプがPhone モデルの通常のフィールド。

私のアプリでは User has_one Contact であるため、User has_one Contact と Contact has_many :phones ではなく、すべての電話関連情報を Contact モデルに保持したいと考えています。

4

1 に答える 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!

そして、それらは電話ハッシュでアクセスできます:

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 に答える