计算数组中的ActiveRecord实例时出现问题

时间:2011-03-11 06:44:57

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

我正在使用Ruby on Rails 3,我想解决计算数组中ActiveRecord实例的问题。


我有这段代码

data = Account.where({:name => "Test_name", :city => "Test_city"}).limit(10)

data调试

#<Account:0x000001029d2da0>#<Account:0x000001029d2c60>#<Account:0x000001029d2bc0>#<Account:0x000001029d2b20>

data检查是

"[#<Account name: \"Test_name\", city: \"Test_city\">, #<Account … >, #<Account id… >, …]"

怀疑 ##&lt; ...&gt; 应该是#<Account...>,#<Account...>,<...>(请注意逗号)?


如果在我的代码中我使用以下

data_count = data.count

data_count

nil

为什么nil?我该如何计算帐户?


  • 如果我使用result = data.class,则result的调试为nil,但如果我使用result = data.class则调试为"{\"inheritable_attributes\":{}}"
  • 如果我使用Account.find_by_name("Test_name")代替Account.where(...),我会得到与上述相同的结果。

3 个答案:

答案 0 :(得分:0)

我认为你在某些情况下遇到了一些问题。 是否可以显示where子句中使用的属性值。 对我来说它的工作正常:

 data = Account.where('id != 0').limit(10)
 data_count = data.count

答案 1 :(得分:0)

使用以下内容:

data = Account.where("id = 2 and email = 'test_email@test.com'")

答案 2 :(得分:0)

要了解最新信息,请使用以下命令启动rails控制台:

$ rails c

鉴于Account是ActiveRecord模型,您应该能够在rails控制台中执行以下操作:

> Account.all.count
=> 100
> Account.where(:status=>'active')
=> [ #<Account id: 1, name: "a1", ...>, #<Account id: 2, name: "a2", ...>, #<Account id: 3, name: "a3", ...>, ...]

我正在做很多事情,因为我不知道你的架构。将where条件替换为适合您情况的任何条件。返回的值应该看起来像一个数组,其中包含数据库中与条件匹配的所有行的列表。顺便说一句,数组是一个元素列表,并且inspect(以及控制台中的默认显示)show元素用逗号分隔。我没有使用调试,所以我无法评论它应该做什么。

您可以验证返回的值是否为AREL,并且应该能够执行一些其他操作来验证事情是否按预期工作。

> Account.where(:status=>'active').class
=> ActiveRecord::Relation
> Account.where(:status=>'active').size
=> 99
> Account.where(:status=>'active').count
=> 99
> Account.where(:status=>'active').limit(10).count
=> 10

如果这些在控制台中按预期工作,则视图中可能存在一些模糊正确行为的内容。在这种情况下,您需要发布视图代码的详细信息。如果在控制台中仍然出现奇怪的行为,我建议发布仍然存在问题的实际模型代码的最小部分,以及迁移,以便我们可以看到模式。