我猜是简单的红宝石问题。
这为什么起作用?:
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的动作“导航”
模块缺少什么?
答案 0 :(得分:1)
V1::TaxonsController.class_eval do
def navigation
end
end
在V1 :: TaxonsController类上创建导航实例方法。当您使用Ruby的范围解析运算符(::)省略V1时,导航实例方法不是在V1 :: TaxonsController类上创建的,而是在TaxonsController类上创建的。我猜想,如果它是Rails控制器,则TaxonsController类的定义如下:
class V1::TaxonsController < ApplicationController
end
这表明上述TaxonsController类位于Rails应用程序(app / controllers / V1)的V1目录中。因此,如果您使用class_eval在TaxonsController类上定义一个额外的方法,如下所示:
TaxonsController.class_eval do
def navigation
end
end
然后将不会在app / controllers / V1中的TaxonsController上定义导航方法。
我希望这会有所帮助。