Ruby on rails 统计Rails中活动记录对象的记录

Ruby on rails 统计Rails中活动记录对象的记录,ruby-on-rails,ruby-on-rails-3,activerecord,count,ruby-2.0,Ruby On Rails,Ruby On Rails 3,Activerecord,Count,Ruby 2.0,我的问题非常直接和简单。我正在使用Rails 3.2.13和Ruby 2.0.0开发Web应用程序。我的问题中有一个问题 @questions=Question.where(“parent\u id=?and Question\u type\u id=?”,57,12),生成以下结果 [#<Question id: 58, description: "Explian Pointers", question_type_id: 12, parent_id: 57, created_at: "2

我的问题非常直接和简单。我正在使用Rails 3.2.13和Ruby 2.0.0开发Web应用程序。我的问题中有一个问题

@questions=Question.where(“parent\u id=?and Question\u type\u id=?”,57,12)
,生成以下结果

[#<Question id: 58, description: "Explian Pointers", question_type_id: 12, parent_id: 57, created_at: "2013-11-21 06:38:58", updated_at: "2013-11-21 06:38:58">]
当我执行@questions.count@questions.length时,它返回一个错误

undefined method `length' for #<Question:0x00000006496b90>
未定义的方法“长度”#

的未定义方法“count”#
有人能帮我找出为什么会发生这种情况,或者我们如何从活动记录对象(而不是通过数组)中找到总计数或记录吗


谢谢:-

find_by返回单个结果对象(或者如果查询返回多行,则返回结果的第一个对象),而不是包含结果的数组

使用Rails 3.X时,可以使用find_all_by,例如find_all_by_parent_id_和question_type_id来获取所需的数组

find_all_by仍将在Rails 4.0中工作,但已被弃用。在两个版本的Rails中都首选使用
,其中
。对于您的具体示例,我喜欢以下格式:

Question.where(:parent_id => exam_Question.id).where(:question_type_id => 12).count
有关详细信息,请参阅。

ruby的.count或.length方法只能应用于数组或哈希。您不能在任何ActiveRecord对象上使用该方法


在第二次查询中,您得到的是1个对象的结果,因此在本例中不能使用.count或.length

Steve Wilhelm是正确的。我们有几种方法

@questions = Question.find_all_by_parent_id_and_question_type_id(57,12)
@count = @questions.count => 1

或者直接使用

@questions = Question.count(:conditions => {:parent_id => exam_Question.id, :question_type_id => 12})
@questions => 1

谢谢大家。

如果使用
.where
.count
,您将得到正确的查询,而不是计算返回数组的大小

Question.where(parent_id: 57, question_type_id: 12).count

# => SELECT COUNT(*) FROM "questions" WHERE "questions"."parent_id" = 57 AND "questions"."question_type_id" = 12 

您也应该在Rails 3中使用
where
@questions = Question.where("parent_id =? and question_type_id = ?",exam_Question.id,12)
@count = @questions.count => 1
@questions = Question.count(:conditions => {:parent_id => exam_Question.id, :question_type_id => 12})
@questions => 1
Question.where(parent_id: 57, question_type_id: 12).count

# => SELECT COUNT(*) FROM "questions" WHERE "questions"."parent_id" = 57 AND "questions"."question_type_id" = 12