首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有多态模型的Rails范围

带有多态模型的Rails范围
EN

Stack Overflow用户
提问于 2014-11-22 20:47:08
回答 1查看 1.4K关注 0票数 2

我在一个多态关系的模型上从一个非常基本的范围得到了一些奇怪的结果。以下是这些关系的简要总结和细节。

模型/金融学

代码语言:javascript
复制
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

代码语言:javascript
复制
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财务报告时的结果摘要:

代码语言:javascript
复制
firm.financials.ltm #AR relation of financials that belong to the firm but are not ltm
firm.financials.where(ltm: true).last #nil

更奇怪的是,当一家公司确实拥有ltm的财务数据时,其范围将如预期的那样运作。

以前有没有人有过这个问题,或者有什么想法?我的意思是,简单的答案是不使用范围,但我想了解什么可能导致这一点。

--基于评论的更新----谢谢你们花了很多心思在这个问题上。

  1. D面你是对的。代码是firm.financials.ltm而不是firm.financials.ltm.last。当我输入这个问题时,那是个错误。我更新了上面的内容以反映,下面还有SQL查询。
  2. 吉říPospíšil -伟大的建议。我将在我的应用程序更新,但留在这里,以避免造成混乱。
  3. 乔马科夫。如果用户没有使用before_save调用输入true,我将强制ltm为false,所以我不认为这是正确的,但是感谢您的想法。

因此,这些都来自于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",“公司”]

EN

回答 1

Stack Overflow用户

发布于 2014-11-23 00:36:49

您的作用域不能正常工作,您的作用域中的.last只得到一个结果,而不是一个ActiveRecord关系,移除.last,该作用域将很好地使用ltm=true获取所有Financials

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27082372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档