计算子模型的属性= x的关联

时间:2014-09-19 12:26:11

标签: sql ruby-on-rails activerecord

当手动变速器=真时,试图计算驾驶员的车辆数量。 (司机有很多汽车;汽车属于司机等)

我目前的代码:

<% @driver = Driver.find(1) %>
<% driver.cars.where("Car.manual = true").count %>

返回此错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "car"
LINE 1: ...ars"  WHERE "cars"."driver_id" = $1 AND (Car.m...
                                                             ^
: SELECT COUNT(*) FROM "cars"  WHERE "cars"."driver_id" = $1 AND (Car.manual= true)

当我删除“.count”时,它似乎找到了一个关系,因为它打印出来:

#<Car::ActiveRecord_AssociationRelation:0x007fea6ddf4c88>

我也试过

<%= @driver.cars.where(manual = true).count %>

但这会返回所有司机车的数量。

我怀疑问题出在我的“manual = true”语法上,但我对编写查询相当新,所以我可能会错过一些非常明显的东西。如果有人能帮我弄清楚我哪里出错了,我会很感激。 (或者,当然,如果有更好的方法可以做到这一点。)

1 个答案:

答案 0 :(得分:0)

Driver类应声明关系:

class Driver
  has_many :cars
   # other things
end

然后,您必须将哈希值传递给where条件:

 <%= @driver.cars.where(manual => true).count %>

或使用新的ruby哈希语法:

<%= @driver.cars.where(manual: true).count %>

您始终可以使用

调试发送到数据库的查询
<%= @driver.cars.where(manual: true).to_sql %>