未定义的方法'零'表示... ActiveSupport :: OrderedHash

时间:2011-01-31 00:07:03

标签: ruby-on-rails ruby

检查下面的注释。为什么在我p variant_attributes之前,blank?方法返回错误,而在它之后,它运行正常?

Rails 3.0.3上的Ruby 1.9.2-p0

p variant_attributes.blank?
# => NoMethodError Exception: undefined method `zero?' for {"Brocade w/ Grande Stripe backing"=>3}:ActiveSupport::OrderedHash
p variant_attributes
# => [#<VariantAttribute id: 1251, variant_id: 561, product_option_id: 838, value: "Brocade w/ Grande Stripe backing">]
p variant_attributes.blank?
# => false

1 个答案:

答案 0 :(得分:7)

如果variant_attributes是一种ActiveRecord记录集合(它看起来像),那么可能是因为rails使用延迟加载来从数据库中获取记录,但blank?方法不会触发实际装载。

您可能需要在all上调用variant_attributes方法来手动触发加载,或者如果您不想这样做,则可以转到variant_attributes.count.zero?而不是variant_attributes.blank? {1}}

有关详细信息,请参阅Pratik Naik's blog post about ActiveRecord 3.0查询界面