如何从 ActiveStorage 附件中获取内容类型?
How can I get content type from an ActiveStorage attachment?
我正在创建一个视图,其中包含通过 ActiveStorage 存储的视频。目前我正在显示这样的视频:
%video{ controls: true, preload:"metadata" }
%source{ src: rails_blob_path(@video.source), type: "TODO: Content Type" }
我想找到一种从附件中获取内容类型的方法。我发现我可以通过使用 @video.source.attachment.blob.content_type
来实现它,但这看起来很笨拙。是否有另一种类似于 video.source.content_type
的更简单的方法?不幸的是,使用 video_tag
助手对我来说不是一个可行的解决方案。
是的,有一个更短的解决方案:@video.source_blob.content_type
。
我建议你看看 ActiveStorage 的源代码,在那里你可以看到所有可用的方法和可能性,但并不总是有很好的记录。
您可以直接从附件访问内容类型,不需要在 blob 中调用它,只需执行以下操作:@video.content_type
class ActiveStorage::Attachment < ActiveRecord::Base
self.table_name = "active_storage_attachments"
belongs_to :record, polymorphic: true, touch: true
belongs_to :blob, class_name: "ActiveStorage::Blob"
delegate_missing_to :blob #This line allow you to call all the blob methods from attachmen
ActiveStorage 使用 Marcel 来验证和获取内容类型。此处提供所有内容的详尽列表:
https://github.com/rails/marcel/blob/main/lib/marcel/tables.rb
我正在创建一个视图,其中包含通过 ActiveStorage 存储的视频。目前我正在显示这样的视频:
%video{ controls: true, preload:"metadata" }
%source{ src: rails_blob_path(@video.source), type: "TODO: Content Type" }
我想找到一种从附件中获取内容类型的方法。我发现我可以通过使用 @video.source.attachment.blob.content_type
来实现它,但这看起来很笨拙。是否有另一种类似于 video.source.content_type
的更简单的方法?不幸的是,使用 video_tag
助手对我来说不是一个可行的解决方案。
是的,有一个更短的解决方案:@video.source_blob.content_type
。
我建议你看看 ActiveStorage 的源代码,在那里你可以看到所有可用的方法和可能性,但并不总是有很好的记录。
您可以直接从附件访问内容类型,不需要在 blob 中调用它,只需执行以下操作:@video.content_type
class ActiveStorage::Attachment < ActiveRecord::Base
self.table_name = "active_storage_attachments"
belongs_to :record, polymorphic: true, touch: true
belongs_to :blob, class_name: "ActiveStorage::Blob"
delegate_missing_to :blob #This line allow you to call all the blob methods from attachmen
ActiveStorage 使用 Marcel 来验证和获取内容类型。此处提供所有内容的详尽列表:
https://github.com/rails/marcel/blob/main/lib/marcel/tables.rb