У меня есть модели Учителя, Ученика и Родителя, которые принадлежат Пользователю.Это сделано для того, чтобы учитель мог создавать учеников и родителей, которые могут или не могут войти в приложение в зависимости от предпочтений учителя.Ученик и Родитель оба принимают вложенные атрибуты для Пользователя, поэтому объект Ученик и Пользователь может быть создан в одной форме.Все четыре модели также принадлежат 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