开发者

Correct Model Data Structure for a Movie site using Rails

I need to save a bunch of people that a related to a movie without duplication.

Let's take the movie Inglourious Basterds as an example.

Here Quentin Tarantino has a bunch of roles.

  • Director
  • Writer
  • Actor

Here is an example of an rspec test

Movie.find_by开发者_JAVA百科_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")

How should I set up the relations between the models?


This is a fairly simple set of models for rails to do.

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

And for the model associations:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜