【问题标题】:ActiveRecord: Load just single association from a has_many based on the parent recordActiveRecord:仅根据父记录从 has_many 加载单个关联
【发布时间】:2021-10-12 16:08:20
【问题描述】:

我有一个Item 模型,而不是一个Category,分配给一个Location,它有一个Responsible(可选)。

那么在一个Category上,你也可以定义多个default_responsibles

  • 一般的,如果没有给出位置
  • 一个用于特定位置(优先于一般位置)。
    这里的想法是,如果没有对项目负责,它会自动从类别中提取正确的。

所以这是挑战。在我显示所有项目(包括负责人)的索引页面上,我如何进行有效的查询,正确的 eager_loading / 预加载该类别的正确责任人(该位置的负责人 - 或者如果缺少 - 通用的负责人)?

使用的数据库:Postgresql

【问题讨论】:

  • 为数据库平台添加标签。

标签: sql ruby-on-rails postgresql activerecord


【解决方案1】:

您还没有显示您的模型代码,但我认为您可以执行以下操作:

class Item
  has_one :responsible
  has_one :default_responsible, through: :category

控制器:

  def index
    @items = Item.all.includes(:responsible).includes(category: :default_responsible)

https://edgeguides.rubyonrails.org/active_record_querying.html#nested-associations-hash

【讨论】:

  • 如果您查看图像,您会看到型号代码。挑战在于如何根据项目的位置选择正确的默认责任,如果一个类别可以有多个 default_responsible(因此每个位置不同)
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多