【问题标题】:Rails decorating controllers for spree用于狂欢的 Rails 装饰控制器
【发布时间】:2018-07-16 19:00:51
【问题描述】:
我猜是简单的红宝石问题。
为什么会这样?:
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 的操作“导航”
模块缺少什么?
【问题讨论】:
标签:
ruby-on-rails
ruby
spree
【解决方案1】:
V1::TaxonsController.class_eval do
def navigation
end
end
在 V1::TaxonsController 类上创建导航实例方法。当您使用 Ruby 的范围解析运算符 (::) 省略 V1 时,导航实例方法不是在 V1::TaxonsController 类上创建,而是在 TaxonsController 类上创建。我猜 TaxonsController 类是这样定义的,如果它是 Rails 控制器:
class V1::TaxonsController < ApplicationController
end
这表明上述 TaxonsController 类位于 Rails 应用程序的 V1 目录中 (app/controllers/V1)。因此,如果您使用 class_eval 在 TaxonsController 类上定义一个额外的方法,如下所示:
TaxonsController.class_eval do
def navigation
end
end
那么导航方法就不会在app/controllers/V1的TaxonsController上定义了。
我希望这会有所帮助。