Rails范围,其中has_one关系没有关系

时间:2017-04-06 19:47:56

标签: ruby-on-rails ruby scope

Trip.rb

class Trip < ActiveRecord::Base
  has_one :report
end

Report.rb

class Report < ActiveRecord::Base
  belongs_to :trip
  belongs_to :user
end

首先存在旅行,然后需要报告。创建报告后,它会获得trip_id。该关系的作用在于控制台Trip.report显示正确的报告

我正在试图找出(大概是在Trip模型中)如何通过关系获得没有报告的旅行列表

这似乎应该是直截了当的,但我感觉它可能不是。

scope :need_report, -> { where(joins(:report)) }

会让我得到有报告的旅行,但我正试图回到相反的地方。

不确定我是否应该:

  1. 返回连接的反面
  2. 以某种方式将report_id更新为行程,以便轻松调用

1 个答案:

答案 0 :(得分:3)

你可以这样做(返回一个数组):

scope :no_report, -> { select { |trip| trip.report.blank? } }

也可以获得ActiveRecord::Relation

scope :no_report, -> { includes(:report).where(report: { id: nil })