Ruby 包含范围

mr_*_*cle 3 ruby ruby-on-rails

在我的 Rails 6 应用程序中,我有定义active范围的模型 Journey:

class Journey < ApplicationRecord
  has_many :users, through: :journey_progresses
  has_many :journey_progresses, dependent: :destroy

  scope :active, -> { where(is_deleted: false) }
end
Run Code Online (Sandbox Code Playgroud)

在我的端点中,我想显示用户旅程进度以及序列化器旅程本身。为此,我使用下面的查询,效果很好

      def query
        current_user.journey_progresses.includes(:journey)
      end
Run Code Online (Sandbox Code Playgroud)

如何修改上述查询以仅显示活动旅程?我试图添加类似的位置current_user.journey_progresses.includes(:journey).where(is_deleted: false),但出现错误:

Caused by PG::UndefinedColumn: ERROR:  column journey_progresses.is_deleted does not exist
Run Code Online (Sandbox Code Playgroud)

根据我尝试过的这个答案current_user.journey_progresses.includes(:journey).where(journey: {is_deleted: false} ),但我收到另一个错误:

Caused by PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "journey"
Run Code Online (Sandbox Code Playgroud)

此类操作的正确语法是什么?

Ste*_*zyn 5

您可以合并已连接模型的范围。

current_user.journey_progresses.joins(:journey).merge(Journey.active)
Run Code Online (Sandbox Code Playgroud)

这比测试布尔值更好is_deleted,因为将来,如果使旅程处于活动状态的定义发生变化,您将不需要修改上面的行。