我想扩展 ActiveStorage::Attachment 类并添加一个枚举属性以显示附件。
我最初的方法是在 \app\models 目录中创建一个新文件 attachment.rb,如下所示。
class ActiveStorage::Attachment < ActiveRecord::Base
enum visibility: [ :privately_visible, :publicly_visible]
end
这行不通。
欢迎任何建议。Rails 扩展类的方法是什么?
更新
我有一个现在可以部分工作的解决方案。为此,我创建了一个扩展 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?和private_visible?在视图中可用,它们在控制器中不可用。当调用控制器中的任何方法时,枚举似乎已经消失了。我收到“NoMethodError - 未定义的方法”错误。令人惊讶的是,一旦枚举方法在控制器中被调用一次,它们在视图中也不再可用。我假设 ActiveStorage::Attachment 类会动态重新加载,并且扩展会丢失,因为它们仅在初始化期间添加。
有任何想法吗?