[rails]関連(多対多)
多対多の関連を表現する場合、この関連を取り持つテーブル(結合テーブル)が別途必要。
モデル定義では、主従関係はないので、お互いに「has_and_belongs_to_many」を定義する。
例:clubsテーブルと、studentsテーブルが多対多で関連している場合。
clubsテーブルのカラム
id,name
studentsテーブルのカラム
id,name
clubs_studentsテーブルのカラム
clubs_id,students_id
関連を取り持つテーブルとして関連するテーブル名を"_"でつないだ名前を定義。(つなぐ順番は辞書順)
カラムを関連するテーブル名+"_id"を設定する。
そして、clubsのモデルは以下のように記述
class Club < ActiveRecord::Base
has_and_belongs_to_many :students
end
students側はこう
class Studnet < ActiveRecord::Base
has_and_belongs_to_many :school
end
これで、clubs側のコントローラ等で"students"の名前でstudentsテーブルを参照できるし、
students側からは"clubs"の名前でclubsテーブルを参照できるようになる。
また、使用できるメソッド等はhas_meny(1対多)と同じ。
« 3/4 UNIFLAME トレイルスプーン Ti | トップページ | ldapsearchでActiveDirectoryを検索する。 »
「ruby/rails」カテゴリの記事
- acts_as_paranoid(2008.04.01)
- ActiveScaffoldで表示するレコードを設定する(2008.03.31)
- ActiveCalendarの入力フォーマットを変える(2008.03.24)
- ActiveScaffoldListFilters(2008.03.21)
- Activescaffoldでdate/datetimeをカレンダーで入力する(2008.03.21)
« 3/4 UNIFLAME トレイルスプーン Ti | トップページ | ldapsearchでActiveDirectoryを検索する。 »
コメント