Rails方式来计算我的案例中的nr个记录

时间:2011-12-28 10:48:45

标签: ruby-on-rails ruby-on-rails-3

我正在使用 Rails v2.3.2

我有一个名为UsersCar模型

class UsersCar < ActiveRecord::Base
  belongs_to :car
  belongs_to :user
end

模型映射到数据库表users_cars,该表只包含两列:user_idcar_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 方式?

4 个答案:

答案 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被命名为笨拙。

好像你想要

  • 用户has_and_belongs_to_many:cars
  • Car has_and_belongs_to_manu:users

如果您想了解更多有关Rails中多对多关联的信息,请阅读上述关联指南。

答案 3 :(得分:0)

我设法找到了计算条件的方法:

UsersCar.count(:condition=>"user_id=3")