我在我的应用程序中使用单表继承,并遇到从祖先构建继承用户的问题。例如,使用以下设置:
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
如何从学校的实例构建instructor
或student
记录?尝试School.first.instructors.build(....)
之类的内容只会为我提供一个新的用户实例,而且我无法访问教师特定的字段,例如terms_of_service
,因此在生成教师时会导致错误从控制台构建的特定表单会给我一个质量分配错误(因为它正在尝试创建用户记录而不是指定的讲师记录)。我举了学校的例子,但是我想从User表继承一些其他的关联,所以我不必重复数据库中的代码或字段。我是否遇到此问题,因为无法在STI设置中共享关联?
答案 0 :(得分:1)
您应该明确指定教师
class School < ActiveRecord::Base
has_many :users
has_many :instructors,:class_name => 'Instructor', :foreign_key => 'user_id'
end
答案 1 :(得分: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
答案 2 :(得分: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