我从具有多态关系的模型的非常基本范围得到一些奇怪的结果。以下是关系的简要概述和细节。
模型/ financials.rb
class Financial < ActiveRecord::Base
belongs_to :financiable, :polymorphic => true
#ltm is a boolean field in the model
scope :ltm, -> { where(ltm: true).last }
然后有一个基本的公司模型,有很多财务
模型/ firm.rb
class Firm < ActiveRecord::Base
has_many :financials, :as => :financiable, dependent: :destroy
当firm
没有ltm财务(即没有ltm: true
财务)时,我得到一个奇怪的结果。但是,当我打电话给firm.financials.ltm
时,我得到了属于公司但没有ltm:true的财务的积极记录关系。但是,当我执行firm.financials.where(ltm: true).last
时,我得到nil
公司没有ltm财务的结果摘要:
firm.financials.ltm #AR relation of financials that belong to the firm but are not ltm
firm.financials.where(ltm: true).last #nil
更让人感到奇怪的是,当一家公司确实拥有该公司的财务资产时,该范围就会按预期运作。
有没有人曾经遇到过这个问题或有任何想法?我的意思是简单的答案是不使用范围,但我想了解可能导致这种情况的原因。
---基于评论的更新--- 谢谢大家对此深思熟虑。
firm.financials.ltm
而非firm.financials.ltm.last
。当我输入问题时,这是一个错字。我更新了上面的内容以反映以及下面的SQL查询。所以这些来自firm
没有任何financials
和ltm = true的情况。如您所见,范围请求正在对属于公司的所有财务进行数据库的第二次查询。当它在初始查询中找不到时,为什么会这样做呢?
firm.financials.ltm
财务负荷(4.6ms)选择“财务”。*来自“财务” 在哪里“财务”。“financiable_id”= $ 1 AND “财务”。“financiable_type”= $ 2 AND“财务”。“ltm”='t' 订购“财务”。“id”DESC LIMIT 1 [[“financiable_id”,11], [“financiable_type”,“公司”]] 财务负荷(1.2ms)选择“财务”。*来自“财务”WHERE “财务”。“financiable_id”= $ 1 AND“财务”。“financiable_type” = $ 2 [[“financiable_id”,11],[“financiable_type”,“公司”]]
firm.financials.where(ltm:true).last
财务负荷(16.8ms)选择“财务”。*来自“财务” 在哪里“财务”。“financiable_id”= $ 1 AND “财务”。“financiable_type”= $ 2 AND“财务”。“ltm”='t' 订购“财务”。“id”DESC LIMIT 1 [[“financiable_id”,11], [“financiable_type”,“公司”]]
答案 0 :(得分:0)
您的范围无法正常工作,您的范围中的.last
获得一个结果而不是ActiveRecord关系,请移除.last
,并且范围可以正常运行Financials
ltm=true
1}}