ActiveRecord::EagerLoadPolymorphicError:无法急切加载多态关联

2023-11-25

class Transaction < ActiveRecord::Base
  belongs_to :account, :polymorphic => true
end

class Bankaccount < ActiveRecord::Base
  has_many :transactions, :as => :account
end

class Creditcard < ActiveRecord::Base
  has_many :transactions, :as => :account
end

尝试对帐户处于活动状态的交易进行汇总。

Transaction.sum(:all, :conditions => "account.status = 'active'", :include => :account)

因此,经过一番阅读后,我发现了这一点: 原因是父模型的类型是列值,因此其对应的表名不能放入该查询的 FROM/JOIN 子句中。 表名是bankaccounts 和creditcards,这是否意味着它们应该是单数? 另外,account_type 是一个银行帐户或信用卡的字符串来反映模型,但它应该是表名吗?


这里有两个问题:

  1. 对多态关联进行总结。
  2. 多态关联的条件。

实际上你不能做这两件事。因此,执行这两个查询应该会得到相同的错误:

  1. Transactions.count(:all, :joins => :account)
  2. Transactions.find(:all, :conditions => "accounts.status = 'active'", :joins => :account)

要真正获得所需的信息,您必须明确列出可能的父多态关联。实现此目的的一种方法是简单地使用 SQL 和 LEFT JOINS,以便您可以使用单个查询。使用 Rails 可以通过两个查询来执行此操作:

Creditcard.sum(
  :all, 
  :select => "transactions.amount", 
  :conditions => "creditcards.status = 'active'", 
  :joins => :transaction
) + Bankaccount.sum(
  :all, 
  :select => "transactions.amount", 
  :conditions => "bankaccounts.status = 'active'", 
  :joins => :transaction
)

P.S:如果您不打算在查询后访问连接的对象,最好使用 :join 而不是 :include 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveRecord::EagerLoadPolymorphicError:无法急切加载多态关联 的相关文章

随机推荐

  • 图像隐写术

    我正在研究隐写术应用程序 我需要在图像文件中隐藏一条消息并使用密码保护它 文件大小没有太大差异 我正在使用最低有效位算法 并且可以成功地处理 BMP 文件 但它不适用于 JPEG PNG 或 TIFF 文件 该算法是否适用于这些文件 有更好
  • 如何从代码隐藏调用 javascript 函数

    我用 ASP NET 页面编写了 JavaScript 在 Asp net 页面中
  • 如何检查列表是否具有且仅有一个真值?

    在 python 中 我有一个应该有的列表唯一的一个真值 即bool value is True 有没有聪明的方法来检查这一点 现在 我只是遍历列表并手动检查 def only1 l true found False for v in l
  • 在 VS Code 中,如何在同一编辑器组的多个选项卡中打开同一文件?

    Sometimes I want to open the same file multiple tabs each tab focusing on a different line method in Eclipse this is eas
  • AngularJS src 上的动画图像发生变化

    我有一个 AngularJS 应用程序 我可以在其中从 Web 服务加载 更改一些图像 控制器 controller PlayerCtrl function scope programService programService refre
  • 如何使用 jQuery 获取页面加载时下拉列表的值

    使用 jQuery 如何在页面加载时获取 select 中所选项目的值 我可以在 Change 等上执行此操作 但无法弄清楚页面加载的方式 这是我的代码
  • SQL:如何每天选择一条记录,假设每天包含超过1个值MySQL

    我想从中选择记录 2013 04 01 00 00 00 to today 但是 每一天都有很多价值 因为他们每 15 分钟保存一个值 所以我只想要每天的第一个或最后一个值 表架构 CREATE TABLE IF NOT EXISTS va
  • 优化排序列表的切割/切片方法

    Python 中是否有任何预制的优化工具 库可以对 小于 某个值的列表进行剪切 切片 问题是 假设我有一个如下列表 a 1 3 5 7 9 我想删除所有的数字 lt 6 所以结果列表将是 7 9 6不在列表中 所以我不能使用内置的index
  • 仅从 sparql 查询中选择第一个对象

    我想从 dbpedia 获取 Daft Punk 的唱片目录 对于每张专辑我想展示 1 标题 2 发行年份 3 维基百科页面 所以我写了这个查询 PREFIX d
  • 如何隐藏绘图中的数据间隙?

    我的数据集可能包含较大的数据间隙 并且我想绘制数据图表 而不用绘图自动用空格填充间隙 我的应用程序中的示例图表 Data date responses percentage 2017 02 13 4 0 6296 2017 02 14 1
  • 如何等待ajax调用返回

    我正在尝试使用 JQuery 尽管在执行进一步的代码之前我正在努力成功等待 ajax 调用成功 有没有办法等待ajax调用 我看过例子 但似乎只是盲目地等待 x 秒 谢谢 詹姆士 是的 您可以同步执行请求 var bodyContent a
  • AngularJS if 语句?

    所以我正在浏览 AngularJS 教程 我在控制器中定义了一个数组 当我循环 ng repeat feature name feature description 时 我通过调用返回数组中的不同点 我不明白的是 假设我在数组中有第三个点
  • 如何从 Instagram 网络浏览器中抓取关注者?

    谁能告诉我如何访问底层 URL 以查看给定用户的 Instagram 关注者 我可以使用 Instagram API 来完成此操作 但考虑到审批流程的待更改 我决定改用抓取 Instagram 网络浏览器允许您查看任何给定公共用户的关注者列
  • 使用 Backbone.js 将表单输入序列化为 JSON

    我正在开发 RESTful 应用程序 我在服务器端使用 Java 在前端使用 Backbone 两者将通过 JSON 进行通信 我的应用程序有很多表单 我想 将表单输入序列化为 JSON 将 JSON 发送到服务器 我的问题 将表单输入序列
  • 错误代码100在r中使用fitdist拟合exp分布

    我试图使我的数据符合指数分布 但出现以下错误 Error in fitdist x41 exp method mle the function mle failed to estimate the parameters with the e
  • 为什么从 .Net 应用程序调用 SQL 函数与在 Management Studio 中进行相同调用时存在性能差异

    我们在测试和开发环境中遇到一个问题 从 Net 应用程序调用时 函数有时运行速度非常慢 当我们直接从管理工作室调用这个函数时 它工作得很好 以下是它们在分析时的差异 从应用程序 中央处理器 906阅读数 61853写入 0持续时间 926
  • 使用 Ajax 从 DataTable 中删除一行

    我有一个 JSF 视图 它列出了 Primefaces 中集合中的项目DataTable 最右边的列包含删除按钮 当单击删除按钮时 应该进行 Ajax 调用 从会话变量中删除相应的项目Cart并就地更新视图 我希望请求和视图更改尽可能少 以
  • 无效查询。您不能使用多个“in”过滤器

    this ref collection users ref gt ref where uid1 in reciverId senderId where uid2 in reciverId senderId 给我错误 例如 查询无效 您不能使
  • 双向映射的最佳数据结构

    我想要一个从键映射到对象的数据结构 反之亦然 与仅在单个方向映射的 HashMap 不同 一个想法可能是将 HashMap 存储在其自身内部以进行反向查找 但这将是一种低效的方法 双向映射的最佳实现是什么 最简单的想法 包含 2 个映射的包
  • ActiveRecord::EagerLoadPolymorphicError:无法急切加载多态关联

    class Transaction lt ActiveRecord Base belongs to account polymorphic gt true end class Bankaccount lt ActiveRecord Base