首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展Rails 4引擎模型

扩展Rails 4引擎模型
EN

Stack Overflow用户
提问于 2016-12-06 15:26:09
回答 1查看 233关注 0票数 1

我试图通过应用程序初始化器从引擎1扩展模型,并关注引擎2,但是我得到了一些奇怪的行为,下面是我所得到的:

Concern

代码语言:javascript
运行
复制
module Engine2
  module Concerns
    module MyConcern

      extend ActiveSupport::Concern

      included do
        puts "Concern included!"
      end

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

初始化器

代码语言:javascript
运行
复制
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>)

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

是否有一个更好的地方,我应该执行类打开,以包括关注,而不是初始化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-11 17:30:04

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

我通过将初始化程序的代码移动到application.rb中的一个application.rb块来解决这个问题。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40998934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档