多対多の関係テーブル
テーブルa (例えば People) と テーブルb (例えば Organizations)が多:多の関係をもっているときに、
関係テーブル a_b ( 例えば organizations_people ) をもちこむことで、関連を定義できます。
create table people ( id serial, name varchar, ); create table organizations ( id serial, name varchar, ); crate table organizations_people ( person_id int, organization_id int, constraint fk_op foreign key (person_id) references people(id), constraint fk_op foreign key (organizatiotion_id) references organizations(id), primary key (person_id, organization_id) );
クラス定義(単数形と複数形に要注意)
class Person < ActiveRecord::Base has_and_belongs_to_many :organizations end class Organization < ActiveRecord::Base has_and_belongs_to_many :people end
has_and_belongs_to_many は長いので 「habtm」と呼びます。
関係テーブルにセットするのにしばらく悩みました。が次のようにして
Railsメソッドが裏でセットしてくれることがやっと判明。解決!
pr = Person.new { |p| p.name = 'FUKUI' #個人名 } pr.save og = Organization.new { |o| o.name = 'iTest' #組織名 } og.save # 組織_個人関係organizations_people登録 og.people << pr
↑↑↑↑↑↑↑↑
わかってみれば、実に美しい! すごいね Rails