为什么在以下情况下会丢失方法?

时间:2011-02-04 22:17:17

标签: ruby-on-rails

我有两个问题,但我会将它们发布为两个不同的问题。让我们从第一个开始。

class Order < AbstractOrder        
  def update_status
    self.all_created.each do |order|
       order.status = :in_progress    
       order.save
    end  
  end    
end

在我尝试拨打电话时的规格

  

Order.update_status

我收到错误说:

    Failure/Error: Order.update_status
     NoMethodError:
       undefined method `update_status' for #<Class:0x00000103f256a8>
     # ./spec/models/order_spec.rb:17:in `block (3 levels) in <top (required)>'

Finished in 0.10439 seconds
3 examples, 1 failure

为什么呢?我认为这是一个类方法而不是实例方法。如果我创建一个订单并执行order.update_status它可以工作。有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:2)

要将方法绑定到类对象,您需要将其定义为self.update_status,而self之前的all_created不是必需的:

class Order < AbstractOrder        
  def self.update_status
    all_created.each do |order|
       order.status = :in_progress    
       order.save
    end  
  end    
end