首页 > 解决方案 > Ruby 包含范围

问题描述

在我的 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

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

      def query
        current_user.journey_progresses.includes(:journey)
      end

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

Caused by PG::UndefinedColumn: ERROR:  column journey_progresses.is_deleted does not exist

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

Caused by PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "journey"

这种操作的正确语法是什么?

标签: ruby-on-railsruby

解决方案


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

current_user.journey_progresses.joins(:journey).merge(Journey.active)

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


推荐阅读