- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下内容:
class BaseReseller < ActiveRecord::Base
set_table_name "resellers"
acts_as_nested_set
has_many :merchants, :as => :merchant_owner, :dependent => :destroy
end
class IPSP < BaseReseller
end
class Agent < BaseReseller
end
class Reseller < BaseReseller
end
class Merchant < ActiveRecord::Base
belongs_to :merchant_owner, :polymorphic => true
end
class MerchantsController < ApplicationController
...
def index
...
@merchants = Merchant.joins(:merchant_owner) # breaks!
end
end
请注意我是如何尝试使用多态 merchant_owner 加入 Merchant 并得到这个:ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :merchant_owner。
@merchants = Merchant.includes(:merchant_owner) 最初有效,但是当我开始遍历 View 中的 @merchants 数组时,它因相同的错误而中断 - 似乎是这样,因为我们使用延迟加载的关系并且只当调用非 Arel 方法时,它实际上转到了数据库。
有什么想法吗? Arel 是否支持多态关联连接?任何解决方法?我可以下降到纯 SQL,但这太麻烦了。
谢谢
最佳答案
这对 Arel 的要求可能太高了,我不确定有什么好的解决方案。在您的情况下,看起来所有的 merchant_owners 都共享同一个 reseller 表,因此想要从多态关联中加入是有道理的,但通常多态关联可以与整个数据模型中的各种模型(针对不同的表)相关.这在 SQL 中会变得非常丑陋,并且在一般情况下可能会非常慢,这就是为什么我期望 EagerLoadPolymorphicError 存在。对于您的情况,解决以下问题可能是有意义的:
Merchant.joins("INNER JOIN resellers on merchant_owner_id = resellers.id")
当然,最干净的做法是将此连接作为模型的范围,这样您就可以执行 Merchant.joined_with_owners 并将 SQL 降级到模型层。但是,如果其他非经销商模型有很多商家,这将不起作用。
令我感到惊讶的是,您在 Merchant.includes(:merchant_owner) 中看到了同样的错误,即使在我访问各种属性时我也没有看到类似的数据,但这可能是由于各种差异造成的。
是否出于性能原因或因为您有额外的依赖于经销商属性的 Arel where 子句而尝试预先加载?如果是为了性能,您最好还是使用 SQL...
关于ruby-on-rails - Arel 和多态关联连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9706964/
我在看 : 有关列出哪些方法可用的引用文档? 关于如何设置和执行查询,然后构建复杂查询的教程? 检查自述文件,这里被标记为 Arel 的问题,但大多数是关于如何设置 where 子句,复杂的查询而不是
一个模型有两个感兴趣的属性,名字和城镇。我想搜索 Richard(伦敦)和 Brian(马德里)。 从长远来看, p=Person.scoped pred1=p.table[:forename].eq
让我们有一个 Rails 4.2.x 应用程序,我们有两个表 posts 和 authors,我们想使用 Arel 来获取由 name == 'Karl' 的作者创作的帖子。 (在这种情况下,我们可以
我正在尝试重构一段代码(并提高我对 Arel::Nodes::Case 的理解),我想转换此 Arel.sql 语句 Arel.sql(default_order) def defau
我正在使用 Arels 创建查询。在此查询中,我使用了 generate_series 函数。这是我的代码: def generate_series Arel::Nodes::Na
我有这个用例,我从某个模型中获得符号化的深层关联,并且我必须执行某些涉及使用外连接的查询。如何在不求助于手动编写完整 SQL 的情况下做到这一点? 我不想要的答案: - 使用包含(不能很好地解决深层关
我正在尝试使用 ARel 清理用 MySQL case 语句编写的 ActiveRecord 代码。我知道 Arel 能够处理 case 语句,但不确定如何使用它。 所以我有一个带有数量和 user_
我需要一个消息列表,其中每条消息都是当前用户与其他用户之间“对话”中的最新消息。 描述了相同的查询 in this question 我目前的代码是: t1 = Arel::Table.new(:me
我正在尝试使用 Arel#extract 方法。我在源代码中的 test_extract.rb 中的测试用例中看到了一个示例,但是当我尝试在我的应用程序中重现它时,我得到了未定义的方法。 table
我在使用 Arel 聚契约(Contract)一查询中的 2 列时遇到了问题。当我运行它时,在 rails dev-server 崩溃之前,整个服务器会卡住一分钟。我怀疑是无限循环:)。 也许我误解了
我有以下 Arel SQL: Arel.sql("(users.last_donated_at IS NOT NULL AND users.last_donated_at < '#{User::ACT
假设我有几张 table orders = Arel::Table.new :orders stores = Arel::Table.new :stores managers = Arel::Tabl
我有以下内容: class BaseReseller :merchant_owner, :dependent => :destroy end class IPSP true end class M
如果您使用 joins在 ARel 范围内,结果变为只读(即您无法更新您返回的任何记录)。如果您不希望结果是只读的,您只需链接 readonly(false)到范围,例如 User.joins(:or
我有一个 fairly complex sql query我很确定我无法使用 ARel (Rails 3.0.10) 来完成 查看该链接,但它有一些连接和一个 where isn't 子句,我很确定这
我正在尽最大努力让我的大脑围绕阿雷尔及其背后的关系代数进行思考,但如何表示SELECT DISTINCT始终让我无法理解。谁能解释一下如何设置: SELECT DISTINCT title FROM
我正在尝试抽象出有人插入我们代码库的原始 sql 主体,我们使用的是 Rails 4.2.8。我想要生成以 where 子句结尾的 sql,如下所示: WHERE col1=1 OR col2=1 O
我试图寻找一个使用 Arel::UpdateManager 来形成带有 from 子句的更新语句的示例(如 UPDATE t SET t.itty = "b"FROM .. .. WHERE ...)
我想向 Arel 添加额外的列选择结果,其中列中的值在每一行上都相同,以便我可以向 Rails ActiveRecord 对象添加有关查询上下文的额外信息。 那么,我如何使用 Arel 生成此 SQL
我正在使用 RAILS 4 和 MySQL服务通过服务场所有很多场所。 我正在尝试创建一个与以下 SQL 查询等效的 AREL: SELECT DISTINCT services . * FR
我是一名优秀的程序员,十分优秀!