我在一个多态关系的模型上从一个非常基本的范围得到了一些奇怪的结果。以下是这些关系的简要总结和细节。
模型/金融学
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更奇怪的是,当一家公司确实拥有ltm的财务数据时,其范围将如预期的那样运作。
以前有没有人有过这个问题,或者有什么想法?我的意思是,简单的答案是不使用范围,但我想了解什么可能导致这一点。
--基于评论的更新----谢谢你们花了很多心思在这个问题上。
firm.financials.ltm而不是firm.financials.ltm.last。当我输入这个问题时,那是个错误。我更新了上面的内容以反映,下面还有SQL查询。因此,这些都来自于firm在ltm = true中没有任何financials的场景。如您所见,范围请求是对属于公司的所有金融机构的数据库进行第二次查询。当它在初始查询中找不到它时,它为什么要这样做呢?
firm.financials.ltm 财务负荷(4.6ms)从“金融类”中选择“金融类”.*。“financiable_id”=1美元和“金融类”;“financiable_type”= $2和“金融类”;“ltm”= 't‘级按“金融类”。“id”型DESC限制1 ["financiable_id",11,"financiable_type",“公司”] 财务负荷(1.2ms)从“金融类”中选择“金融类”.*。“financiable_id”=1美元和“金融类”。“financiable_type”= $2 ["financiable_id",11,"financiable_type",“商号”] firm.financials.where(ltm: true).last 财务负荷(16.8ms)从“金融类”中选择“金融类”.*。“financiable_id”=1美元和“金融类”;“financiable_type”=2美元和“金融类”;“ltm”= 't‘级按“金融类”。“id”型DESC限制1 ["financiable_id",11,"financiable_type",“公司”]
发布于 2014-11-23 00:36:49
您的作用域不能正常工作,您的作用域中的.last只得到一个结果,而不是一个ActiveRecord关系,移除.last,该作用域将很好地使用ltm=true获取所有Financials。
https://stackoverflow.com/questions/27082372
复制相似问题