gpt4 book ai didi

ruby-on-rails - 具有多态性的 Rails MTI

转载 作者:行者123 更新时间:2023-12-04 03:48:25 24 4
gpt4 key购买 nike

想象一下这个场景:

我的类(class)有不同类型的学生。所有的学生都有相似的属性,但每一类学生也有独特的属性。因此,我使用 MTI 将公共(public)属性保留在学生表中,将个别属性保留在各自的表中,并在从类(class)角度处理学生类型时使用多态性来抽象学生类型。我遵循了本教程: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))时,我的问题就来了。我不能从类里面做到这一点,因为它与特定学生没有联系,当我尝试直接实例化它时,它说它无法识别“:class”字段。

Student1.new(:clazz => @clazz, ... [other atributes]...)

unknown attribute: :class

谁能给我一个关于如何完成这个的提示?谢谢

最佳答案

基本上@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 不会为您提供任何帮助。

关于ruby-on-rails - 具有多态性的 Rails MTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com