使用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 |
答案 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
:
答案 1 :(得分:0)
Vehicle.joins(:dealership_vehicle).where(dealership_vehicles:{is_lot_ready:&#34; f&#34;})