Rails 为大礼包装饰控制器
Rails decorating controllers for spree
我想是个简单的 ruby 问题。
为什么会这样?:
module Spree
module Api
module V1
V1::TaxonsController.class_eval do
def navigation
end
end
end
end
end
当我这样做时:
module Spree
module Api
module V1
TaxonsController.class_eval do
def navigation
end
end
end
end
end
我得到 "UnknowAction",找不到 Spree::Api::V1::TaxonsController
的操作 'navigation'
模块缺少什么?
V1::TaxonsController.class_eval do
def navigation
end
end
在 V1::TaxonsController class 上创建导航实例方法。当您使用 Ruby 的范围解析运算符 (::) 省略 V1 时,导航实例方法不会在 V1::TaxonsController class 上创建,而是在 TaxonsController class 上创建.我猜 TaxonsController class 是这样定义的,如果它是 Rails 控制器:
class V1::TaxonsController < ApplicationController
end
这表明上述 TaxonsController class 位于 Rails 应用程序 (app/controllers/V1) 的 V1 目录中。因此,如果您使用 class_eval 在 TaxonsController class 上定义一个额外的方法,如下所示:
TaxonsController.class_eval do
def navigation
end
end
那么在 app/controllers/V1 中的 TaxonsController 上将不会定义导航方法。
希望对您有所帮助。
我想是个简单的 ruby 问题。
为什么会这样?:
module Spree
module Api
module V1
V1::TaxonsController.class_eval do
def navigation
end
end
end
end
end
当我这样做时:
module Spree
module Api
module V1
TaxonsController.class_eval do
def navigation
end
end
end
end
end
我得到 "UnknowAction",找不到 Spree::Api::V1::TaxonsController
的操作 'navigation'模块缺少什么?
V1::TaxonsController.class_eval do
def navigation
end
end
在 V1::TaxonsController class 上创建导航实例方法。当您使用 Ruby 的范围解析运算符 (::) 省略 V1 时,导航实例方法不会在 V1::TaxonsController class 上创建,而是在 TaxonsController class 上创建.我猜 TaxonsController class 是这样定义的,如果它是 Rails 控制器:
class V1::TaxonsController < ApplicationController
end
这表明上述 TaxonsController class 位于 Rails 应用程序 (app/controllers/V1) 的 V1 目录中。因此,如果您使用 class_eval 在 TaxonsController class 上定义一个额外的方法,如下所示:
TaxonsController.class_eval do
def navigation
end
end
那么在 app/controllers/V1 中的 TaxonsController 上将不会定义导航方法。
希望对您有所帮助。