2011-01-30 41 views
5

Giả sử tôi có hai mô hình, Đạo diễn và Phim và mô hình tham gia thứ ba có tên là Chỉ đường. Chúng được định nghĩa như vậy:Tạo hoặc cập nhật liên kết với has_many: thông qua

Movie:

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

Giám đốc:

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

Dẫn:

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

Khi Tôi tạo một bộ phim mà tôi muốn có thể tạo một đạo diễn với thông tin được cung cấp (tên và imdb_id) hoặc tìm một đạo diễn hiện có dựa trên imdb_id và liên kết nó với bản ghi Phim.

Về cơ bản, tôi không muốn xóa hoặc chỉnh sửa đạo diễn. Tôi chỉ muốn có thể tạo ra một đạo diễn mới nếu anh ấy không tồn tại dựa trên imdb_id của anh ấy, hoặc liên kết với một đạo diễn đã có từ trước khi tôi tạo hoặc chỉnh sửa phim.

Câu hỏi của tôi là, làm cách nào để liên kết tất cả điều này trong chế độ xem/bộ điều khiển?

accepts_nested_attributes_for hoạt động tốt trừ bạn thực sự có thể chỉnh sửa tên của đạo diễn khi bạn đang chỉnh sửa một bộ phim mà tôi không muốn. Tôi hoàn toàn không quan tâm đến việc cập nhật/phá hủy các giám đốc thực tế, chỉ có các hiệp hội.

Trả lời

3

Ví dụ phim của bạn có mảng director_ids chứa id của mối quan hệ. Vì vậy, bạn có thể dễ dàng liệt kê tất cả các giám đốc ví dụ mà hộp kiểm và yêu cầu người sử dụng để kiểm tra các mối quan hệ ...

<% 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][]', '' %> 

(các hidden_tag là khi người dùng bỏ chọn tất cả các ô, do đó director_ids sẽ trống.)

+0

Xin cảm ơn, điều đó giúp tôi đi đến đó. Tôi cuối cùng sẽ có một vài đạo diễn (trong hàng trăm) để hiển thị tất cả chúng sẽ không hoạt động nhưng tôi có thể khắc phục điều đó bằng một số phép thuật tìm kiếm AJAX. Tôi có một trường hợp sử dụng cụ thể mà tôi không chắc chắn cách triển khai. Giả sử tôi tạo một bộ phim với đạo diễn Steven Spielberg. Sau đó, tôi nhận ra anh ta không thực sự chỉ đạo nó nhưng James Cameron đã làm và tôi không có James Cameron trong DB được nêu ra. Với giải pháp của bạn, tôi có thể bỏ chọn Steven Spielberg nhưng làm cách nào để thêm James Cameron vào và tạo ra bản ghi và liên kết của Giám đốc DB? Cảm ơn! –

Các vấn đề liên quan