Как построить запись объема в рельсах 3? - PullRequest
1 голос
/ 03 января 2011

У меня есть 3 модели Школы , Люди и Роли

class School < ActiveRecord::Base

  has_many :teachers, :class_name => "Person", :include => :roles, :conditions => ["roles.name = ?",'Teacher']
  has_many :students, :class_name => "Person", :include => :roles, :conditions => ["roles.name = ?",'Student']
end

class Person < ActiveRecord::Base
  has_and_belongs_to_many :roles
  belongs_to :school
  scope :teachers, joins(:roles) & Role.teacher
  scope :students, joins(:roles) & Role.student
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :persons
  validates_presence_of :name

  def self.sanitize role
    role.to_s.humanize.split(' ').each{ |word| word.capitalize! }.join(' ')
  end

  scope :teacher, where(:name => 'Teacher')
  scope :student, where(:name => 'Student')

end

Сбор записей работает нормально (например, school.teachers или school.students)

а как заставить

  1. school.teachers.build (или school.teachers.new) назначить роль «Учитель»?
  2. school.students.build (или school.students.new) назначить роль «Студент»?

1 Ответ

0 голосов
/ 03 декабря 2011

Я предполагаю, что вы хотите создать нового учителя или ученика для данного экземпляра школы.

Если это так, вы можете сделать одну из двух вещей. Вы можете создать два метода в модели школы для создания новых учеников и учителей, или вы можете просто вызвать конструктор по модели учитель или ученик и перейти в школу. Например:

Добавить методы к модели школы (вариант 1):

def new_teacher( put_params_for_teacher_here, school )
  return Teacher.new( put_passed_in_params_here, :school => school
end

# Repeat for new_student

Пройти школу во время создания Учителя / Студента (вариант 2):

Teacher.new( params_for_teacher, :school => school )

Очевидный путь - просто пройти в школу при создании объектов Учитель / Ученик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...