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)
此类操作的正确语法是什么?
您可以合并已连接模型的范围。
current_user.journey_progresses.joins(:journey).merge(Journey.active)
Run Code Online (Sandbox Code Playgroud)
这比测试布尔值更好is_deleted
,因为将来,如果使旅程处于活动状态的定义发生变化,您将不需要修改上面的行。
归档时间: |
|
查看次数: |
1804 次 |
最近记录: |