【问题标题】: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上定义了。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多