2011-01-26 15 views
0

に参加し、私は次のようしている:は、has_and_belongs_to_manyアソシエーションの関係を使用して、テーブル

model A 
has_and_belongs_to_many :B, :join_table => "A_B" 
has_and_belongs_to_many :C, :join_table => "A_B" 

table A_B 
A_id 
B_id 
C_id 

現在の行動:

A.saveを行うとき、私は2を取得INSERT文をA_Bテーブルに挿入する - A_idが設定され、B_idが設定され、C_id = 0であり、A_idとC_idだけがすべて設定されている(INSERT文でB_idはない)したがって、私のJOINのテーブル内の2行がある

望ましい行動:

A.saveをやって、私はすべての3つのIDが正しく設定されているA_Bテーブル、に1つのINSERTをしたいです。

どうすればよいですか?

私が理解しているように(私は実際にはDBレガシーを変更するアクセス権がないため)、has_manyを使用することはできません。これはJOINテーブルにIDカラムが必要なためです。それが真実でない場合は、私はいかなる提案にも開放しています。

答えて

0

拡張メソッドでこれを行うことができます。あなたはおそらくまだ2つのトリップをDBに渡しますが、1つは更新になることができます。

has_and_belongs_to_many :B, :join_table => "A_B" do 
    def save 
    abc = A.find_or_create_by_a_id(self.a_id) 
    abc.b = self.b 
    abc.save 
    end 
end 

has_and_belongs_to_many :C, :join_table => "A_B" do 
    def save 
    abc = A.find_or_create_by_a_id(self.a_id) 
    abc.c = self.c 
    abc.save 
    end 
end 

もちろん、新しいレコードであるかどうかをチェックする必要があります。アソシエーション拡張でセーブを再定義できるかどうかはわかりません....

関連する問題