【问题标题】:Ruby on Rails gem inclusion and initialisation order for reopening a model declared in a gem from another gemRuby on Rails gem 包含和初始化顺序,用于从另一个 gem 重新打开在 gem 中声明的模型
【发布时间】:2011-04-13 21:10:13
【问题描述】:

最初,我发布了 Stack Overflow 问题Ruby on Rails gems... Re-open models(现已删除)。但我认为这个问题太令人困惑了......我会尝试根据我的发现提出不同的问题。

比方说……

  • Gem A 有一个引擎 (lib/a/engine.rb) 并声明了一个模型 M(基于 ActiveRecord,'app/models/m.rb')。
  • 在 gem A 中,有一个入口点 (lib/a.rb),它会在 rails 加载 gem 时被解析。
  • 在 gem B 中,有一个入口点 (lib/b.rb),它会在 rails 加载 gem 时被解析。
  • Gem B 依赖于 gem A(在 gemspec 中指定),需要重新打开 A::M 模型。
  • 我检查了“a.rb”是否在“b.rb”之前加载,确实如此。

现在我的问题是,在“b.rb”中,如果我尝试对 M 模型(来自 gem A,还记得吗?)执行 class_eval 以重新打开它并向其添加“B 特定逻辑” ,M类尚未定义...我已将消息放入'm.rb'中,并且我认为在加载'a.rb'和'b.rb'之后很长时间才加载它...

在 gem B 中,ActiveRecord 加载了我的模型 A::M 后如何获得回调?我需要在我的引擎中做些什么吗?或者换句话说,ActiveRecord在A中加载模型后,加载了哪些文件?

【问题讨论】:

    标签: ruby-on-rails-3 gem


    【解决方案1】:

    以防万一,请务必在 gem B 中手动加载 gem A。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多