Вложенные модели Rails и разделение данных по областям - PullRequest
0 голосов
/ 12 марта 2011

У меня есть модели Учителя, Ученика и Родителя, которые принадлежат Пользователю.Это сделано для того, чтобы учитель мог создавать учеников и родителей, которые могут или не могут войти в приложение в зависимости от предпочтений учителя.Ученик и Родитель оба принимают вложенные атрибуты для Пользователя, поэтому объект Ученик и Пользователь может быть создан в одной форме.Все четыре модели также принадлежат Studio, поэтому я могу разделять данные по областям.Текущая студия устанавливается в application_controller.rb путем поиска текущего субдомена.

В контроллере моих студентов (на самом деле, во всех моих контроллерах) я использую @ studio.students.new вместо Student.new,и т. д., чтобы настроить нового студента на правильную студию и, следовательно, на правильный поддомен.Тем не менее, вложенный пользователь не выбирает студию от своего родителя - ему присваивается значение nil.

Я думал, что мог бы сделать что-то вроде params[:student][:user_attributes][:studio_id] = @student.studio.id в контроллере, но для этого потребовалось бы выполнить attr_accessible :studio_id в User, что было бы плохо.

Как я могу убедиться, что вложенный пользователь выбирает ту же область, что и модель Student, когда она создается?

student.rb

class Student < ActiveRecord::Base
  belongs_to :studio
  belongs_to :user, :dependent => :destroy

  attr_accessible :user_attributes
  accepts_nested_attributes_for :user, :reject_if => :all_blank
end

student_controller.rb

def create
  @student = @studio.students.new
  @student.attributes = params[:student]
  if @student.save
    redirect_to @student, :notice => "Successfully created student."
  else
    render :action => 'new'
  end
end

user.rb

class User < ActiveRecord::Base
  belongs_to :studio

  accepts_nested_attributes_for :studio
  attr_accessible :email, :password, :password_confirmation, :remember_me, :studio_attributes

  devise :invitable, :database_authenticatable, :recoverable, :rememberable, :trackable
end

1 Ответ

0 голосов
/ 12 марта 2011

Я думаю, вы поступаете неправильно.Учащиеся, родители и учителя не принадлежат пользователю, они наследуют от пользователя.Таким образом, вы ищете наследование с одной или несколькими таблицами.

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