[英]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.