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

时间:2019-06-06 03:00:15

标签: 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" }

我想找到一种从附件中获取内容类型的方法。我发现可以使用@video.source.attachment.blob.content_type来解决这个问题,但这似乎很笨拙。有没有类似video.source.content_type的更简单的解决方法?不幸的是,使用video_tag助手对我来说不是可行的解决方案。

2 个答案:

答案 0 :(得分:1)

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

我建议您查看ActiveStorage的源代码,在这里您可以看到所有可用的方法和可能性,而这些方法和可能性并非总是有据可查的。

答案 1 :(得分:0)

您可以直接从附件中访问内容类型,无需在the 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