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

jay*_*ode 2 ruby ruby-on-rails

请查看下面的注释.为什么在我之前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
Run Code Online (Sandbox Code Playgroud)

edg*_*ner 7

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

你可能想要打开all方法variant_attributes来手动触发加载,或者如果你不想这样做,你可能会去variant_attributes.count.zero?而不是variant_attributes.blank?

有关详细信息,请参阅Pratik Naik关于ActiveRecord 3.0查询界面的博文