ruby-on-rails - Rails:与范围内的 trackable_type 的急切负载关联
问题描述
这是一个很难的。
我有一个Activity
模型:
class Activity < ActiveRecord::Base
belongs_to :trackable, polymorphic: true
scope :include_all, -> { includes(:trackable) }
...
end
所以如果我这样做:
@activities = Activity.include_all
上面的代码运行良好,但如果我也想急切地加载可跟踪记录的父母怎么办?这些模型也有不同的父母:
Answer
模型:
class Answer < ActiveRecord::Base
belongs_to :question
has_many :activities, as: :trackable
scope :include_all, -> { includes(:question) }
...
end
Post
模型:
class Post < ActiveRecord::Base
belongs_to :blog
has_many :activities, as: :trackable
scope :include_all, -> { includes(:blog) }
...
end
Category
模型:
class Category < ActiveRecord::Base
has_many :activities, as: :trackable
scope :include_all, -> {}
...
end
请注意,include_all
每个模型中的范围都显示了要包含的关联。我努力了
class Activity < ActiveRecord::Base
...
scope :include_all, -> { includes(trackable: :question) }
...
end
Activity
当出现with trackable_type
=时,这将中断Post
。
有任何想法吗?
Rick 的回答是一个非常好的方法,但是,有没有办法在另一个范围内使用关联范围?这对于没有父母喜欢的协会来说非常方便Category
。
就像是
scope :include_all, -> { includes(trackable -> { include_all } ) }
解决方案
搞定了!如果您将范围直接添加到该belongs_to
行,则关联将与该范围一起加载。
class Activity < ActiveRecord::Base
belongs_to :trackable, -> { include_all } , polymorphic: true
...
end
推荐阅读
- r - 将数据框中的列拆分为多个列并在同一数据框中进行 cbind
- python - Python - 简单的输入程序挂在输入语句
- amazon-web-services - 如何在 Kibana 上的 AWS 中查看弹性搜索集群中的索引率?
- javascript - 反应模块的最佳方式
- google-cloud-platform - 通过 Google IoT 核心发布/订阅消息的最大有效负载大小是多少?
- mysql - 输入当前 root 密码时安装 MySQL 8.0.20 (Windows 10) 时出错
- html - Div 内部 Div 未水平对齐
- python - pandas.read_csv 将字符串转换为科学记数法中的“数字”(我不想要)
- webview - XCUITest - 如何从 Google 移动广告 SDK 访问 WebView 屏幕上的 UI 元素
- html - 带内笔画的圆形进度条