0

人が多くのメールアドレスを持ち、メールアドレスが1人だけになるように何かを構築したいのですが、Companyという別のモデルもあり、これも多くのメールアドレスを持つことができ、列company_idは必要ありません。とEメールテーブルのperson_idなので、私はできると思いました...

person.rb

has_many:person_emails has_many:emails、:through =>:person_emails

person_emails.rb

所属_to:人belongs_to:メール

email.rb

has_one:person_email has_one:person、:through =>:person_email

今起こっていることはそれです...

p = Person.first#=> "Nik" p.emails#=> Nikが持っているすべてのメールを表示p.person_emails#=>Nikのすべてのperson_email共同テーブルレコードを表示

e = Email.first#=> Nikの電子メールアドレスの1つe.person_email#=>は、この電子メールの唯一のperson_email共同テーブルレコードを示しています

お願いします...e.person#=> "Nik"

誰かが問題が何であるかについての考えを持っていますか?

ありがとうございました

4

1 に答える 1

4

あなたの状況は、アソシエーションよりもはるかにクリーンなポリモーフィックアソシエーションを使用することを示唆していhas_many :throughます。例えば:

class Person
  has_many :emails, :as => :emailable
end

class Company
  has_many :emails, :as => :emailable
end

class Email
  belongs_to :emailable, :polymorphic => true
end

PersonEmailsあなたはあなたのクラスを完全に取り除くことができます。データベースでは、emailsテーブルは次のようになります。

create_table :emails do |t|
  t.string :address
  t.string :emailable_type
  t.integer :emailable_id
end

このemailable_type列には、関連付けられたモデルの名前(この場合は"Person"または"Company")が格納さemailable_idれ、関連付けられたオブジェクトのIDが格納されます。詳細については、 「ポリモーフィックアソシエーション」のRailsAPIドキュメントを参照してください。

于 2010-01-21T22:51:41.610 に答える