繁体   English   中英

需要关注的是扩展Rails 4引擎模型

[英]Extending Rails 4 engine models with concerns

我试图从引擎1扩展一个模型,引擎2通过应用程序初始化程序,但我得到一些奇怪的行为,这是我得到的:

关心

module Engine2
  module Concerns
    module MyConcern

      extend ActiveSupport::Concern

      included do
        puts "Concern included!"
      end

      def jump
        puts 'Jumping!!!!'
      end
    end
  end
end

初始化

require 'engine2/my_concern'

module Engine1
  class Member
    include Engine2::Concerns::MyConcern
  end
end

当我启动应用程序时,我认为Concern included! 控制台中的消息,并且Member类可以调用方法jump ,但是一旦我更改了主机应用程序中的任何代码,我就会收到以下错误:

NoMethodError (undefined method 'jump' for #<Engine1::Member:0x007fe7533b4f10>)

我必须重新加载服务器,然后它再次正常工作,直到我在主机应用程序中进行另一个更改,然后它再次抛出错误,为什么会发生这种情况,我该如何避免它?

是否有一个更好的地方我应该执行课程开放以包括关注而不是初始化器?

所以我终于明白了,基本上发生了什么,在开发模式下,每个模型都会在每次代码更改时重新加载,但初始化程序只在服务器启动时运行一次,所以一旦代码在控制器中发生变化,模型就会被重新加载但是不再包括关注,因此打破。

我通过将初始化application.rb的代码移动到to_prepare中的to_prepare块来解决它。

对于那些不知道的人, to_prepare会添加一个准备回调,该回调将在开发模式中的每个请求之前或生产中的第一个请求之前运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM