Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将子容器传递给父类型的容器_Ruby On Rails - Fatal编程技术网

Ruby on rails 将子容器传递给父类型的容器

Ruby on rails 将子容器传递给父类型的容器,ruby-on-rails,Ruby On Rails,在我的rails应用程序中,我有一个父类个人和子类学生和教授 继承由一个名为“acts_as_relation”的gem处理,它模拟多表继承 此外,我还有一个动作,其中一个学生实例被附加到一个个人列表中。正常情况下,我希望这不会出现任何问题,但我得到了以下错误: ActiveRecord::AssociationTypeMismatch: Individual(#70220161296060) expected, got Student(#70220161349360) 以下是我的模型概览:

在我的rails应用程序中,我有一个父类个人和子类学生和教授

继承由一个名为“acts_as_relation”的gem处理,它模拟多表继承

此外,我还有一个动作,其中一个学生实例被附加到一个个人列表中。正常情况下,我希望这不会出现任何问题,但我得到了以下错误:

ActiveRecord::AssociationTypeMismatch: Individual(#70220161296060) expected, got Student(#70220161349360)
以下是我的模型概览:

class Individual < ActiveRecord::Base
    acts_as_superclass
end

class Student < ActiveRecord::Base
      acts_as :individual
end

class Professor < ActiveRecord::Base
      acts_as :individual
end
class-Individual
我没有用过这个gem,只是想给你一些帮助,还有:

它们都提到您通过关系调用对象,这会混淆多态性或相似性。这两篇文章无法解决这个问题,我想这是因为他们可以找到正确的对象来处理他们的关系


进一步看,我发现:

充当关系
使用多态has\u one关联来模拟 多表继承。以电子商务为例,您可以 将产品声明为超级模特,所有类型的产品声明为 :product(如果您愿意,您可以使用其别名为_a和 是(一个超类)

或者像你在一个多态程序上那样声明它们属于关联 在这种情况下,您必须将名称传递给acts_,如:as选项:

change_表:产品没有|
t、 整数:可生产的\u id
t、 字符串:可生产的\u类型
结束
类Pen:可生产
结束
类目:可生产
结束

你确定你的数据表设置正确吗?

我在项目中解决这个问题的方法是使用一些类的
实例。谢谢你的回答。我几乎可以肯定数据库没有问题。在设置gem之后,我用rails控制台检查了功能,并在数据库中插入了正确的内容。根据文档,很明显Book和Pen都在扩展ActiveRecord::Base,所以这可能就是我们要做的。宝石本身运作良好,直到我想把一个孩子的集合,这是家长类型…嗯-我希望我可以帮助,但我没有任何经验的宝石抱歉!谢谢你的回复。这确实可以解决问题,但我不想把“个人”称为教授、学生或任何其他未来的后代。
class Product < ActiveRecord::Base
  acts_as_superclass
end

class Pen < ActiveRecord::Base
  acts_as :product
end

class Book < ActiveRecord::Base
  acts_as :product
end
create_table :products, :as_relation_superclass => true do |t|
  # ...
end
change_table :products do |t|
  t.integer :producible_id
  t.string  :producible_type
end

class Pen < ActiveRecord::Base
  acts_as :product, :as => :producible
end

class Book < ActiveRecord::Base
  acts_as :product, :as => :producible
end
p = Professor.create
a_model.individuals << p.individual
puts "#{a_model.individuals.first.class.name}"
=> Individual
puts "#{a_model.individuals.first.specific.class.name}"
=> Professor