创建或更新与has_many的关联:through

时间:2011-01-30 23:34:00

标签: ruby-on-rails ruby associations has-many-through

假设我有两个模型,Director和Movie,以及第三个名为Directions的连接模型。它们被定义为:

电影:

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

当我创建一部电影时,我希望能够使用提供的信息(name和imdb_id)创建一个导演,或者找到一个基于imdb_id的现有导演,并将其与电影记录相关联。

基本上,我不想删除或编辑导演。我只希望能够创建一个新的导演,如果他不存在基于他的imdb_id,或者在创建或编辑电影时与预先存在的导演关联。

我的问题是,如何在视图/控制器中链接所有这些?

accepts_nested_attributes_for 工作正常除了您可以在编辑我不想要的电影时实际编辑导演的名字。我完全没有兴趣更新/摧毁实际的董事,只有协会。

1 个答案:

答案 0 :(得分:3)

您的电影实例有一个director_ids数组,其中包含关系的ID。 因此,您可以轻松地列出所有董事,例如哪些复选框,并要求用户检查关系......

<% 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是指用户取消选中所有框,以便director_ids为空。)