我正在使用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(...)
,我会得到与上述相同的结果。答案 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
如果这些在控制台中按预期工作,则视图中可能存在一些模糊正确行为的内容。在这种情况下,您需要发布视图代码的详细信息。如果在控制台中仍然出现奇怪的行为,我建议发布仍然存在问题的实际模型代码的最小部分,以及迁移,以便我们可以看到模式。