Правильная структура данных модели для сайта фильма с использованием Rails - PullRequest
0 голосов
/ 12 января 2011

Мне нужно спасти группу людей, имеющих отношение к фильму, без дублирования.

Давайте возьмем фильм Бесславные ублюдки в качестве примера.

Здесь Квентин Тарантино имеет несколько ролей.

  • Режиссер
  • Писатель
  • Актер

Вот примертеста 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")

Как установить отношения между моделями?

1 Ответ

1 голос
/ 12 января 2011

Это довольно простой набор моделей для рельсов.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...