gpt4 book ai didi

ruby-on-rails - 从具有多态关联的一个表中检索行

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:25 24 4
gpt4 key购买 nike

我有一个模型与其他三个表具有多态关联:

class User < ActiveRecord::Base
belongs_to :authenticatable, :polymorphic => true


# == Schema Information
#
# Table name: employees
#
# id :integer(4) not null, primary key
# ...
# school_id :integer(4)

class Guardian < ActiveRecord::Base
has_one :user, :as => :authenticatable
belongs_to :school


# == Schema Information
#
# Table name: guardians
#
# id :integer(4) not null, primary key
# ...
# school_id :integer(4)

class Guardian < ActiveRecord::Base
has_one :user, :as => :authenticatable
belongs_to :school

# == Schema Information
#
# Table name: students
#
# id :integer(4) not null, primary key
# ...
# school_id :integer(4)

class Student < ActiveRecord::Base
has_one :user, :as => :authenticatable
belongs_to :school

如您所见,最后 3 个模型属于“学校”模型,因此有一个名为 school_id 的列。我想从 user 中检索所有行,以便它们相应的可验证 school_id 等于某个值。澄清一下,我想做这样的事情:

User.joins(:authenticatable).where(:school_id => some_value)

实际上,这将导致

ActiveRecord::EagerLoadPolymorphicError

最后,我设法查找了一些文档,这些文档建议在多态关联上使用 include 应该可行,例如:

User.find(:all, :include => :authenticatable) (This works)

但是如果我这样做:

User.find(:all, :include => :authenticatable).where(:school_id => some_value)

它破坏了 rails ,因为 User.find(...) 返回一个 Array 并且没有为该类定义 where 方法。

我已经尝试了一些其他选项,但没有找到一种方法来完成我想要的。你能帮助我吗?谢谢!

最佳答案

可以尝试在joins语句中使用SQL查询来解决:

Model1.joins("INNER JOIN model2 ON model2.id = model1.polymorphizm_id INNER JOIN model3 ON model3.id = model1.polymorphizm_id INNER JOIN model4 ON model4.id = model1.polymorphizm_id").where("model2.column_id = ... or model3.column_id = ... or model4.column_id = ...")

我实际上并没有尝试过,但是多态关联。向模型添加 2 列:xxx_typexxx_id。它们用于处理关联。具有多个模型。

关于ruby-on-rails - 从具有多态关联的一个表中检索行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162394/

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