将sql查询转换为rails activerecord

时间:2011-04-01 14:42:48

标签: mysql ruby-on-rails activerecord

我有一个简单的问题。我无法弄清楚此sql查询的等效轨道:

select COUNT(description) from reports where user_id = current_user;

其实我想算一下总数。特定用户在登录其帐户时发布的报告,而不是所有用户发布的所有报告。 我也无法弄清楚我应该如何传递登录的当前用户的user_id,以便我可以获得所需的结果。 请帮助。

2 个答案:

答案 0 :(得分:2)

类似的东西:

current_user.reports.count

答案 1 :(得分:1)

在Rails 2中

如果您在用户模型中定义了has_many :reports

count = current_user.reports.first(:select => "COUNT(description) as count").count

如果模型中未定义has_many

count = Report.first(:select => "COUNT(description) as count",
             :conditions => {:user_id => current_user.id}).count

current_user.reports.select{ |report| report.description }.count虽然产生了不同的查询,但已经足够了。 (Select * from reports where ..)然后获取数组的计数。

但是在Rails 3中,它很容易。

如果您在用户模型中定义了has_many :reports

count = current_user.reports.count(:description)

,否则

count = Report.where(:user_id => current_user.id).count(:description)

请参阅Rails guide以获取Rails 3 AR计算查询。