如何在Ruby on Rails中修补补丁

问题描述 投票:1回答:2

我想为ActiveStorage::Blob添加一个方法。我有这个:

配置/初始化/ active_storage_cached_urls.rb

module ActiveStorageBlobCachedUrl
  def direct_url
    xxx || self.service_url
  end
end

config / environment.rb的结尾

ActiveStorage::Blob.include ActiveStorageBlobCachedUrl

我在开发中推出了rails s,它的确有效。然后我更新了一个ruby文件,比如一个模型,我收到一个错误:undefined method 'direct_url...

我猜想没有我的猴子补丁就会重新加载。为了让我的猴子补丁也重新加载,我错过了什么?

ruby-on-rails monkeypatching
2个回答
1
投票

这不是最佳解决方案,但是当我将代码放在environment.rb或lib / .rb或config / initializers / .rb中时,我就有了错误。

如果我把它放在一个模型文件,那么它的工作原理。

应用程序/模型/ random_model.rb

ActiveStorage::Blob.include ActiveStorageBlobCachedUrl
ActiveStorage::Variant.include ActiveStorageVariantCachedUrl

class RandomModel < ApplicationRecord
  xxx
end

0
投票

把它放在initializers/的文件中

module ActiveStorageBlobCachedUrl
  def direct_url
    # xx
  end
end


ActiveSupport::Reloader.to_prepare do
  ActiveStorage::Blob.include ActiveStorageBlobCachedUrl
end
© www.soinside.com 2019 - 2024. All rights reserved.