0

我在我的应用程序中使用单表继承,并且遇到了从祖先构建继承用户的问题。例如,使用以下设置:

class School < ActiveRecord::Base

  has_many :users

end

class User < ActiveRecord::Base


  attr_accessible :type #etc...

  belongs_to :school

end

Class Instructor < User

   attr_accessible :terms_of_service
   validates :terms_of_service, :acceptance => true

end


Class Student < User

end

如何从Schoolinstructor的实例构建一个或记录?尝试类似的事情只给我一个新的用户实例,我将无法访问讲师特定的字段,例如在生成特定于讲师的表格时导致错误,从控制台构建会给我一个批量分配错误(因为它是尝试创建用户记录而不是指定的讲师记录)。我举了学校的例子studentSchool.first.instructors.build(....)terms_of_service,但是我想从 User 表继承一些其他关联,因此我不必重复数据库中的代码或字段。我是否遇到此问题是因为无法在 STI 设置中共享关联?

4

3 回答 3

1

您应该明确指定讲师

class School < ActiveRecord::Base

  has_many :users
  has_many :instructors,:class_name => 'Instructor', :foreign_key => 'user_id'

end
于 2013-03-07T21:26:13.160 回答
1

还有什么:

class School < ActiveRecord::Base
  has_many :users
  has_many :instructors
end

class Instructor < User 
  attr_accessible :terms_of_service # let it be at the first place. :)

  validates :terms_of_service, :acceptance => true
end
于 2013-03-07T21:43:12.217 回答
0

好的,问题的一部分似乎源于我的学校模型中有旧的users关联。删除它并为学生和教师单独添加关联是有效的。

更新School.rb

class School < ActiveRecord::Base

  #removed:
  #has_many :users this line was causing problems

  #added
  has_many :instructors
  has_many :students

end
于 2013-03-07T22:43:49.880 回答