我需要一些帮助来理解这段 Ruby 代码。越外行越好。
该方法cancelled?
委托给current_state
,这将尝试获取一个事件 where state == 'cancelled'
。如果没有找到,它将返回STATES
数组中的第一个元素,默认为打开。
怎么
current_state
知道我们想要取消?如果我们想要incomplete?
或者open?
我们在调用时没有提供任何参数怎么办self.cancelled?
。委托方法如何返回布尔值?
current_state
不返回布尔值。它总是返回一个Event
orSTATES[0]
。
显然我错过了一些东西。这是我正在学习的示例应用程序。
class Order < ActiveRecord::Base
has_many :events
STATES = %w[incomplete open cancelled shipped]
delegate :incomplete?, :open?, :cancelled?, to: :current_state
def current_state
(events.last.try(:state) || STATES.first).inquiry
end
def cancel
events.create! state: 'cancelled' if open?
end
def resume
events.create! state: 'open' if cancelled?
end
end