想象一下,我有两个模型
Film
-name
-description
-duration
-year_made
-rating
-actors
Actor
-name
-d_o_b
-biography
-films
演员嵌套在电影中,反之亦然。
我如何在Ruby模型中表示这种关系?实际上,我会有第三个表格actor_id
与film_id
。
在为电影添加细节的同时,我希望能够动态创建一个演员(如果演员不存在则创建一个提供名称的新演员)
提前谢谢。
ADDITION :
刚刚找到similar question的链接。
答案 0 :(得分:3)
您正在查看两个表之间的Has和Belut to Many(HABTM)关系。 请阅读Rails指南中的HABTM关系:http://edgeguides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference
首先,您需要生成一个类似于以下内容的迁移:
class AddActorFilmTable < ActiveRecord::Migration
def self.up
create_table :actors_films, :id => false do |t|
t.integer :actor_id, :null => :false
t.integer :film_id, :null => :false
end
add_index :actors_films, [:actor_id, :film_id], :unique => true
end
def self.down
drop_table :actors_films
end
end
然后在模型中指定:
class Actor < ActiveRecord::Base
has_and_belongs_to_many :films
end
class Film < ActiveRecord::Base
has_and_belongs_to_many :actors
end
这将允许您为此类关系使用所有其他Rails方法。要在表单中使用此功能,您可以关注RailsCast 17: HABTM Checkboxes - 虽然它已经过时,但它仍然适用。或者,您可以使用像Simple Form这样的宝石轻松为您生成关联:
form_for @actor do |f|
f.collection_check_boxes :film_ids, Film.all, :id, :name
end