我想扩展 ActiveStorage::Attachment 类并添加一个枚举属性以实现附件的可见性。
我最初的方法是在 \app\models 目录中创建一个新文件attachment.rb,如下所示。
class ActiveStorage::Attachment < ActiveRecord::Base
enum visibility: [ :privately_visible, :publicly_visible]
end
这是行不通的。
欢迎任何建议。 Rails 扩展类的方式是什么?
Update
我有一个现在部分有效的解决方案。
为此,我创建了一个扩展 active_storage_attachment_extension.rb 并将其放置在 \lib 中
module ActiveStorageAttachmentExtension
extend ActiveSupport::Concern
included do
enum visibility: [ :privately_visible, :publicly_visible]
def describe_me
puts "I am part of the extension"
end
end
end
扩展在初始化期间加载到extensions.rb中
ActiveStorage::Attachment.send(:include, ::ActiveStorageAttachmentExtension)
不幸的是,它只发挥了部分作用:
而枚举方法public_visible?和私人可见?在视图中可用,但在控制器中不可用。当调用控制器中的任何方法时,枚举似乎消失了。我收到“NoMethodError - 未定义方法”错误。
令人惊讶的是,一旦在控制器中调用了枚举方法一次,它们在视图中就不再可用。
我假设 ActiveStorage::Attachment 类会动态重新加载,并且扩展会丢失,因为它们仅在初始化期间添加。
有任何想法吗?
我假设 ActiveStorage::Attachment 类会动态重新加载,并且扩展会丢失,因为它们仅在初始化期间添加。
你是对的。使用Rails.configuration.to_prepare http://api.rubyonrails.org/classes/ActiveSupport/Reloader.html#method-c-to_prepare在应用程序启动后和每次重新加载代码时混合您的模块:
Rails.configuration.to_prepare do
ActiveStorage::Attachment.send :include, ::ActiveStorageAttachmentExtension
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)