使用或不使用范围 rails

To use a scope or not use a scope rails

我有两个表,People 和 Vehicles。车是人的。

我有一个 report/query 可以显示哪些人没有车。我试图将它合并到我的 rails 应用程序中,以便它在有人想要查看此信息时运行。我决定为它编写一个范围,但无法使范围正常工作。代码如下。有什么想法吗?

scope :person_has_no_vehicle, -> { joins(:vehicles).where('Vehicles.person_id IS NULL')}

查询如下

SELECT DISTINCT
    People.ID,
    People.nam_first,
    People.nam_last
FROM
    People
LEFT JOIN Vehicles ON People.ID = Vehicles.person_id
WHERE
    Vehicles.person_id IS NULL

joins 方法总是执行 INNER JOIN,但您原来的 SQL 查询使用 LEFT JOIN.

scope :person_has_no_vehicle, -> { joins("LEFT OUTER JOIN vehicles ON vehicles.person_id = people.id").where('Vehicles.person_id IS NULL')}