想象一下场景:
我有一个班,有不同类型的学生。所有的学生都有相似的特质,但每种类型的学生也有独特的特质。因此,我使用MTI来保留表中的公共属性students和各自表中的单独属性,并使用polimorpism来抽象从类角度处理它们时的学生类型。我遵循了本教程: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
基本上@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默认情况下不会给您带来任何好处。
在此处查看解决方案:http://mediumexposure.com/multiple-table-inheritance-active-record/
类似于http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/.
但根据我的经验,前者更好。一是实现了method_missing,后者做不到。