簡體   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