作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个模型与其他三个表具有多态关联:
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_type
和 xxx_id
。它们用于处理关联。具有多个模型。
关于ruby-on-rails - 从具有多态关联的一个表中检索行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162394/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!