ruby-on-rails - 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"
这种操作的正确语法是什么?
解决方案
您可以合并连接模型的范围。
current_user.journey_progresses.joins(:journey).merge(Journey.active)
这比测试is_deleted
布尔值要好,因为将来,如果使旅程活跃的定义发生变化,您将不需要修改上述行。
推荐阅读
- excel - 需要减去不同的日期时间字段来捕获 TAT(周转时间)
- gcc - gcc 输出文件是什么样的,它究竟包含什么?
- python - 在 mib 文件目录上使用 pysmi
- reactjs - 在单个动态路由中处理两个布局
- linux - nginx(example.app)中的自定义域无法连接
- swift - 不知道为什么背景图片没有填满整个屏幕
- swift - Swift,在数组上保存数据并关闭应用程序时更新小部件
- javascript - 使用发票编号数组创建发票对象,其中初始数组中的每个发票编号都用作 id 属性
- python - 如何从整数中删除 .0?
- typescript - 打字稿将字符串细化为枚举键