大礼包状态的state_machine中的“ next”在哪里?

托尼·韩

在Spree的源代码中,有一种next订购方法

def update
  if @order.update_attributes(object_params)
    persist_user_address

    unless @order.next
      flash[:error] = @order.errors.full_messages.join("\n")
      redirect_to checkout_state_path(@order.state) and return
    end
# ...
end

但是我不知道它在哪里,我无法在Order模型Checkout模块中找到它https://github.com/spree/spree/blob/master/core/app/models/spree/order/checkout。 rb)和state_machine gem。

gmacdougall

它是通过一些技巧在state_machine中定义的。具体在这里:

https://github.com/pluginaweek/state_machine/blob/8a3ba81801782ac4ef9d4ace1209d8d50ffccdb0/lib/state_machine/machine.rb#L764-L766

由于Ruby中提供了元编程,因此很难找到它,在Spree中使用了相当多的代码,并且在state_machine gem中广泛使用了元编程。

幸运的是,Pry是查找事物定义位置的好工具。

~/d/s/sandbox (2-0-stable|✔) ❯❯❯ pry -r ./config/environment
[1] pry(main)> show-source Spree::Order.first.next

From: /home/gmacdougall/.rvm/gems/ruby-1.9.3-p392/gems/state_machine-1.2.0/lib/state_machine/machine.rb @ line 764:
Owner: Spree::Order :state instance helpers
Visibility: public
Number of lines: 3

define_method(method) do |*block_args|
  block.call((scope == :instance ? self.class : self).state_machine(name), self, *block_args)
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

大礼包:造成新的资产故障

来自分类Dev

大礼包和单元测试

来自分类Dev

参数在gdb中在哪里,ret在哪里?

来自分类Dev

Chrome中的Flash在哪里?

来自分类Dev

TravisCI中的JDK在哪里?

来自分类Dev

C ++中的strchr在哪里?

来自分类Dev

HttpClient中的WinHttpClients在哪里?

来自分类Dev

MVC中的服务在哪里?

来自分类Dev

Atom中的“脚本”在哪里?

来自分类Dev

MonoTouch中的CLLocationDegrees在哪里?

来自分类Dev

MBR中的分区在哪里?

来自分类Dev

cymod中的chmod在哪里?

来自分类Dev

Ubuntu中的程序在哪里

来自分类Dev

android中的/ tmp在哪里?

来自分类Dev

Chrome中的Flash在哪里?

来自分类Dev

Ubuntu中的gparted在哪里?

来自分类Dev

FreeBSD中的“在哪里”与“找到”

来自分类Dev

TravisCI中的JDK在哪里?

来自分类Dev

Drupal中的SQL。在哪里

来自分类Dev

反应中的错误在哪里?

来自分类Dev

“在终端中打开”在哪里?

来自分类Dev

从结帐中删除交货步骤也会在大礼包+滑轨中跳过送货地址

来自分类Dev

将纸夹附件添加到大礼包订单表中,

来自分类Dev

“状态”的数据构造函数在哪里?

来自分类Dev

Spark Streamings状态存储在哪里?

来自分类Dev

纵横开关订阅/状态存储在哪里?

来自分类Dev

Spark Streamings状态存储在哪里?

来自分类Dev

程序内部状态存储在哪里?

来自分类Dev

Saga,在哪里存储聚合状态