すいません初心者ですが質問です。

A:ユーザーデータ
B:AとDの関連性1を定義する中間テーブル
C:AとDの関連性2を定義する中間テーブル
D:共通のマスタデータ

A has_many Bs
A has_many Cs
A has_many Ds through Bs
A has_many Ds through Cs
D has_many Bs
D has_many Cs
D has_many As through Bs
D has_many As through Cs
B belongs to A
B belongs to D
C belongs to A
C belongs to D

上記のようなアソシエーションを作成し、
Aの編集画面で関連性1、関連性2に対してそれぞれ別々にマスタCのデータの
チェックボックスから複数選択して、A,B,Cテーブルを更新するということをしたいのですが、
ビュー、コントローラでどのように書いたらうまくできるでしょうか。
中間テーブルが1つの場合はネットで調べてできるようになったのですが、
2つ以上になった場合に、どちらの中間テーブルに対する処理であるかを
指定するやり方はありますか。