我正在使用 Rails v2.3.2 。
我有一个名为UsersCar
的模型:
class UsersCar < ActiveRecord::Base
belongs_to :car
belongs_to :user
end
此模型映射到数据库表users_cars
,该表只包含两列:user_id
,car_id
。
我想使用 Rails 方式计算car_id
的数量 user_id=3
。我在纯SQL查询中知道我可以通过以下方式实现:
SELECT COUNT(*) FROM users_cars WHERE user_id=3;
现在,我希望通过 Rails 方式获得它,我知道我可以做到:
UsersCar.count()
但是如何将...where user_id=3
子句置于 Rails 方式?
答案 0 :(得分:4)
根据the Ruby on Rails Guides,您可以将条件传递给count()
方法。例如:
UsersCar.count(:conditions => ["user_id = ?", 3])
将生成:
SELECT count(*) AS count_all FROM users_cars WHERE (user_id = 3)
答案 1 :(得分:2)
如果您有User对象,则可以执行
user.cars.size
或
user.cars.count
另一种方法是:
UserCar.find(:user_id => 3).size
我能想到的最后一种方式是上面提到的方式,即'UserCar.count(conditions)'。
答案 2 :(得分:1)
使用belogngs to association,您可以在父项上获得几个“魔术”方法来引用其子项。
在你的情况下:
users_car = UsersCar.find(1) #=>one record of users_car with id = 1.
users_car.users #=>a list of associated users.
users_car.users.count #=>the amount of associated users.
但是,我认为你理解这些关联是错误的,因为你的UsersCar被命名为笨拙。
好像你想要
如果您想了解更多有关Rails中多对多关联的信息,请阅读上述关联指南。
答案 3 :(得分:0)
我设法找到了计算条件的方法:
UsersCar.count(:condition=>"user_id=3")