首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Rails中,只有当关联不是零时,如何才能急切地加载一个协会?

在Rails中,只有当关联不是零时,如何才能急切地加载一个协会?
EN

Stack Overflow用户
提问于 2013-12-20 10:42:57
回答 1查看 1.3K关注 0票数 1

我试图使用public_activity gem创建一个活动日志。当加载特定用户的活动时,我使用以下命令:

代码语言:javascript
运行
复制
@activity = PublicActivity::Activity.order("created_at desc").where(owner_id: @awardleader.authentication.id).includes(:trackable, trackable: :awardunit)

在这里,awardunit协会不会一直存在。由于我跟踪了几个模型,有时跟踪模型没有一个奖励单位。那么,只有在关联可用的情况下,我们才能急切地加载关联?

我想要所有的活动..。在这个列表中,可以有来自不同模型的活动。有些模特没有年龄单位作为联想。因此,上面的代码给出了一个错误,说明没有该模型的增值单位!

PS :如果我使用我在问题中显示的代码,就会出现这样的错误:“在Gold上找不到名为”奖励单位“的协会,也许您拼错了吗?”问题是,我不能删除装载award_unit,因为一些履带有奖励单位

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 11:31:56

包括多态关联,如

代码语言:javascript
运行
复制
PublicActivity::Activity.includes(:trackable)

会回来

  1. 所有的活动,无论它们是否有可跟踪的关联。如果没有可跟踪的,其他任何东西都不会被装载。
  2. 包括任何种类的可跟踪的存在,无论其类型。

它通过为数据库生成一个LEFT OUTER JOIN来做到这一点。

声明关联为多态的,如

代码语言:javascript
运行
复制
class PublicActivity::Activity < ActiveRecord::Base
  belongs_to :trackable, polymorphic: true
end

将两列添加到activities数据库表trackables_typetrackables_id中。您可以在查询中使用这些内容。

如果您只想获得与任何类型的可跟踪相关的活动,请使用

代码语言:javascript
运行
复制
PublicActivity::Activity.includes(:trackable).where.not(trackable_type: nil)

如果只希望获取与其关联的AwardUnit活动,请使用

代码语言:javascript
运行
复制
PublicActivity::Activity.includes(:trackable).where(trackable_type: :award_unit)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20701770

复制
相关文章

相似问题

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