この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
どもrickです。
多対多のテーブルとは、
ユーザーと特徴Tableがあるとして、ユーザーと特徴が互いに複数の値を参照するときに使います。
例えは、ユーザーが複数の特徴を登録したいときに、ユーザーn対特徴*となる。
ユーザーも1人ではないので、n対nとなる。
このようなときに使用する。
環境
Rails2.1.1
Postgres8.3.5
設定
名前は、DB1_DB2という命名規則になっている、DBの順番はあいうえお順
$ruby script/generate migrate model1_model2 //modelはいらないので、migrateだけ作成
db/migrateion/..
def self.up
create_table(:model1_model2, :id => false) do |t| //idは必要ないため消す
t.integer :model1_id
t.integer :model2_id
end
end
双方のmodelに
has_and_belongs_to_many :model名s //参照の値が複数だから複数形にする
保存するほうのmodelに(1を使用して2を呼び出した時は、1が保存するほう)
def model2_id=(value)
small = MODEL2.find_by_id(value)
selef.model2s << small
end
こんな風にすると値が自動に保存される。
きものぶぶんは、selef.smodel2s << smallだとおもう
更新する時、更新する方法はないとの事なので、
一度削除してから入れ直すなどするのが良いと思う。
以上。