我需要保存一堆与电影无关的人,而不会重复。
让我们以电影 Inglourious Basterds 为例。
这里 Quentin Tarantino 有很多角色。
这是一个rspec测试的例子
Movie.find_by_title("Inglourious Basterds").actors.map(&:name).should include("Quentin Tarantino")
Movie.find_by_title("Inglourious Basterds").writers.map(&:name).should include("Quentin Tarantino")
Movie.find_by_title("Inglourious Basterds").directors.map(&:name).should include("Quentin Tarantino")
我应该如何建立模型之间的关系?
答案 0 :(得分:1)
这是一套相当简单的rails模型。
rails g model movie name:string
rails g model person name:string
rails g model movie_role movie:belongs_to person:belongs_to role:string
对于模型协会:
class Person < ActiveRecord::Base
has_many :movie_roles
has_many :movies, :through => :movie_roles
end
class Movie < ActiveRecord::Base
%w(actor director writer).each do |type|
base = "#{type}_movie_roles"
has_many base, :conditions => { :role => type }, :class_name => 'MovieRole'
has_many type.pluralize, :through => base, :source => :person
end
end