想象一下这个场景:
我有一个班级,有不同类型的学生。所有学生都有类似的属性,但每种类型的学生也有独特的属性。所以我使用MTI来保持表中学生和各个表中的公共属性,以及从类视角处理学生类型时的polimorphism。我遵循了本教程:http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/。
由此,我得到了这些模型:
class Clazz < ActiveRecord::Base
has_many :students
end
class Student < ActiveRecord::Base
belongs_to :stu, :polymorphic => true
belongs_to :clazz
end
class Student1 < ActiveRecord::Base
has_one :student, :as => :stu
end
class Student2 < ActiveRecord::Base
has_one :student, :as => :stu
end
当我想要实例化特定学生(通过学生间接与班级相关)时,我的问题就出现了。我不能在课堂上这样做,因为它没有与特定学生的连接,当我尝试直接实例化它时,它说它不能识别':class'字段。
Student1.new(:clazz => @clazz, ... [other atributes]...)
unknown attribute: :class
任何人都可以给我一个如何完成此事的提示吗? TKS
答案 0 :(得分:1)
基本上@Aaron试图问的是这是否有效:
class Student < ...
belongs_to :clazz
end
class Student1 < ...
has_one :student, :as => :stu
accepts_nested_attributes_for :stu
end
Student1.new(:stu => {:clazz => @clazz},...[other attributes])
默认情况下,当您需要在这样的对象树之间进行初始化时,ActiveRecord不会对您有所帮助。
答案 1 :(得分:1)
在这里查看解决方案: http://mediumexposure.com/multiple-table-inheritance-active-record/
类似于 http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/
但从我的经验来看,前者更好。一,它实现method_missing, 后者不这样做。