2011-01-30 23 views
5

DirectorとMovieの2つのモデルとDirectionsという3番目の結合モデルがあります。これらは、次のように定義される。has_manyとの関連付けの作成または更新

映画:

class Movie < ActiveRecord::Base 
    has_many :directions 
    has_many :directors, :through => :directions 
end 

監督:

class Director < ActiveRecord::Base 
    has_many :directions 
    has_many :movies, :through => :directions 
end 

道順:

class Direction < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :director 
end 

提供された情報(名前とimdb_id)を持つディレクターを作成するか、imdb_idに基づいて既存のディレクターを探してムービーレコードに関連付けることができる映画を作成します。

本質的に、私はディレクターを削除したり編集したりすることは基本的に望んでいません。私は、自分のimdb_idに基づいて存在しない場合、または映画を作成または編集しているときに既存のディレクターと関連付ける場合にのみ、新しいディレクターを作成することができます。

私の質問は、ビューア/コントローラでこれをすべてリンクするにはどうすればいいですか? accepts_nested_attributes_for

あなたは、私が望んでいない映画を編集しているとき、あなたは実際に監督の名前を編集することができ除いて正常に動作します。私は実際の取締役、唯一の団体を更新/破壊することに全く関心がありません。

答えて

3

ムービーインスタンスには、関係のIDを含むdirector_ids配列があります。 director_idsが空になるように、ユーザは、すべてのボックスのチェックを外したときに だから、簡単に例えば全取締役のチェックボックスを一覧表示し、関係を確認するためにユーザに尋ねることができます...

<% Director.all.each do |director| %> 
    <%= check_box_tag 'movie[director_ids][]', director.id, @movie.directors.include?(director) %> 
    <%= director.name # or whatever (title, etc) %> 
<% end %> 

<%= hidden_field_tag 'movie[director_ids][]', '' %> 

(hidden_​​tagです。 )

+0

ありがとう、それは私が途中で取得します。私は最終的に(何百もの)かなりのディレクターを持っているので、それらを表示することはできませんが、AJAXの検索マジックで問題を解決できます。 実装方法がわからない特定のユースケースがあります。監督としてスティーブン・スピルバーグと映画を制作してみましょう。その後、彼は実際にそれを指示しなかったが、ジェームズキャメロンは、私はまだDBにジェームズキャメロンを持っていないことを実現。あなたのソリューションでは、スティーブンスピルバーグのチェックを外すことができましたが、James Cameronを追加してディレクターのDBレコードとアソシエーションを作成するにはどうすればいいですか? ありがとう! –

関連する問題