SQL Query JOIN表通过ActiveRecord关系

时间:2018-01-20 17:26:51

标签: sql ruby-on-rails activerecord

使用ActiveRecord关系我有一个域设置,通过它我无法找出正确的查询来检索所需的信息。这可能不是理想的模型,但对于我的项目,我需要使用一个包含关系信息的连接模型。

我想过滤联接表,只返回状态为dealership_vehicles.is_lot_ready ='f'或't'的车辆。无论哪种方式,我提出的最接近的事情是查询

SELECT *
FROM vehicles
INNER JOIN dealership_vehicles ON vehicles.dealership_vehicle_id = dealership_vehicles.id
WHERE dealership_vehicles.is_lot_ready = false;

起初我认为它有效,但是在调查数据时,它会带来太多结果,当查询更改为'f'时,它没有带回任何数据。

我无法弄清楚原因,任何建议都会受到赞赏。

class Dealership < ApplicationRecord
has_many :dealership_vehicles
has_many :vehicles, :through => :dealership_vehicles

class Vehicle < ApplicationRecord
belongs_to :dealership_vehicle
has_one :dealership, :through => :dealership_vehicle

class DealershipVehicle < ApplicationRecord
belongs_to :dealership
has_many :vehicles

表中的以下数据:

vehicles
 id |  make  |  model  | year | dealership_vehicle_id |         created_at         |         updated_at
  1 | BMW    | M3      | 2016 |                     1 | 2018-01-20 16:59:13.196586 | 2018-01-20 16:59:13.196586
  2 | Toyota | Corolla | 2016 |                     2 | 2018-01-20 16:59:13.1998   | 2018-01-20 16:59:13.1998

dealerships
   id | name  |    city     |         created_at         |         updated_at
    1 | Ereve | Lith Harbor | 2018-01-20 16:59:13.067827 | 2018-01-20 16:59:13.067827
    2 | Rien  | Ellinia     | 2018-01-20 16:59:13.070359 | 2018-01-20 16:59:13.070359

dealership_vehicles
 id | dealership_id | is_lot_ready | buyer  | price |         created_at         |         updated_at         | permission
 28 |             4 | f            | Randy  | 30099 | 2018-01-20 16:59:13.183475 | 2018-01-20 16:59:13.183475 |
 27 |             3 | t            | Philip | 30099 | 2018-01-20 16:59:13.180412 | 2018-01-20 16:59:13.180412 |

2 个答案:

答案 0 :(得分:0)

我认为您只是错过了't''f'周围的单引号,因为您似乎正在使用文字字符串。

例如:

SELECT *
FROM vehicles
INNER JOIN dealership_vehicles ON vehicles.dealership_vehicle_id = dealership_vehicles.id
WHERE dealership_vehicles.is_lot_ready = 'f';

另外,如果您的表格仅包含示例中的数据,则无法找到任何结果,因为没有关联ID

在这里看到我的意思,它们不匹配,因此您无法JOIN

enter image description here

答案 1 :(得分:0)

Vehicle.joins(:dealership_vehicle).where(dealership_vehicles:{is_lot_ready:&#34; f&#34;})