活动记录,未定义方法

时间:2016-05-22 11:54:01

标签: ruby-on-rails ruby-on-rails-4 activerecord

如果我尝试从模型SubQuantity获取某些东西,我的rails控制台中会出现未定义的方法错误 我有一个名为Subquantity的模型,现在我的模型中有 SubQuantity.rb
belongs_to :product
belongs_to :cart
end
我在SubQuantity模型中定义了一个名为sub_quantity的整数。在我的代码中,我试图做这样的事情 subq = SubQuantity.where(product_id:@product.id, cart_id:current_user.cart.id)
作为回报,我得到了这个,
[#<SubQuantity:0x007fbbdc046d08
  id: 4,
  sub_quantity: 1,
  product_id: 4,
  cart_id: 6,
  created_at: Sun, 22 May 2016 11:03:55 UTC +00:00,
  updated_at: Sun, 22 May 2016 11:03:55 UTC +00:00>]
每当我尝试做这样的事情时,
subq.sub_quantity
我收到这个错误,
NoMethodError: undefined method sub_quantity for
#<SubQuantity::ActiveRecord_Relation:0x007fbbdc04d838>
这不仅仅是sub_quantity,即使使用subq.id,我也会在subq中得到确切的错误。 这有什么不对?

1 个答案:

答案 0 :(得分:1)

每当您使用 where 方法时,即使结果是一个对象,它也会返回一个数组。要解决您的问题,您必须调用.first,从数组中提取第一个结果(在这种情况下是唯一的结果)。例如:

subq = SubQuantity.where(product_id: @product.id, cart_id: current_user.cart.id)
subq.first.sub_quantity

另一种方式,如果没有first则使用find_by。它的工作方式与where方法类似,但只返回一个结果,即它可以找到的第一个结果。

subq = SubQuantity.find_by(product_id: @product.id, cart_id: current_user.cart.id)
subq.sub_quantity