如何从 ActiveStorage 附件中获取内容类型?

CaT*_*aTs 4 ruby-on-rails ruby-on-rails-5 rails-activestorage

我正在创建一个视图,其中包含通过 ActiveStorage 存储的视频。目前我正在显示这样的视频:

%video{ controls: true, preload:"metadata" }
    %source{ src: rails_blob_path(@video.source), type: "TODO: Content Type" }
Run Code Online (Sandbox Code Playgroud)

我想找到一种从附件中获取内容类型的方法。我发现我可以通过使用来获得它,@video.source.attachment.blob.content_type但这看起来很笨重。还有另一种更简单的方法来解决它video.source.content_type吗?不幸的是,使用video_tag助手对我来说不是一个可行的解决方案。

Guz*_*n90 8

您可以直接从附件访问内容类型,不需要在 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
Run Code Online (Sandbox Code Playgroud)


Per*_*ell 5

是的,有一个更短的解决方案:@video.source_blob.content_type.

我建议您查看 ActiveStorage 的源代码,在那里您可以看到所有可用的方法和可能性,但这些方法和可能性并不总是很好地记录在案。