我想扩展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)
很遗憾,它只部分地起作用: 虽然枚举方法publicly_visible?和privately_visible?在视图中可用,但在控制器中不可用。当在控制器中调用任何方法时,该枚举似乎已经消失了。我得到一个“NoMethodError - undefined method”的错误。 令人惊讶的是,一旦在控制器中调用了枚举方法,则它们也不再在视图中可用。 我认为ActiveStorage::Attachment类会被动态重新加载,并且扩展名会因为只在初始化期间添加而丢失。
有什么想法吗?
active_storage_attachment.rb
,然后迁移向active_storage_attachments
表添加visibility
列。 - iGian