2011-02-04 1 views
0

У меня две проблемы, но я отправлю их как 2 разных вопроса. Начнем с первого.Почему я получаю недостающий метод в следующей ситуации?

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, он будет работать. Что не так, и как я могу это исправить?

ответ

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 
+0

я должен обвинять в этом устать, я думал, что это было напротив даже после прочтения нескольких ответов на этот вопрос. Не могу поверить, что я запутался ... – mhenrixon