【问题标题】:How to add a default attachment in rails Activestorage如何在 Rails Activestorage 中添加默认附件
【发布时间】:2018-06-12 07:40:20
【问题描述】:

我有一个模特Post

has_one_attached :cover

不需要附件。 那么,即使用户没有提供默认附件,有什么方法可以添加默认附件。

所以,当帖子显示时,我可以显示一个封面图片。

<% if @post.cover.attached? %>
    <%= image_tag(@post.cover, class: 'card-img-top img-fluid') %>
<% else %>
    <div class="text-align-center img-place-holder">
          No Image Added Please add One
   </div>
<% end %>

除了检查是否附加了某些东西并尝试像这样解决它之外,还有其他方法吗?

所以,我可以使用,

<%= image_tag(@post.cover, class: 'card-img-top img-fluid') %>

直接不带if条件

谢谢

【问题讨论】:

    标签: ruby ruby-on-rails-5 rails-activestorage


    【解决方案1】:

    如果您想附加一张默认图片以发布(如果图片不存在),那么您可以在回调中执行此操作

    # 1. Save a default image in Rails.root.join("app", "assets", "images", "default.jpeg")
    
    # 2. In post.rb
    
    after_commit :add_default_cover, on: [:create, :update]
    
    
    private def add_default_cover
      unless cover.attached?
        self.cover.attach(io: File.open(Rails.root.join("app", "assets", "images", "default.jpeg")), filename: 'default.jpg' , content_type: "image/jpg")
      end
    end
    
    # 3. And in your view 
    <%= image_tag(@post.cover, class: 'card-img-top img-fluid') %>
    

    或者,如果您不想将默认封面附加到帖子,但仍想在帖子的显示页面上显示图像

    # 1. Save a default image in Rails.root.join("app", "assets", "images", "default.jpeg")
    
    # 2. In post.rb
    
    def cover_attachment_path
      cover.attached? ? cover : 'default.jpeg'
    end
    
    # 3. And in your view
    <%= image_tag(@post.cover_attachment_path, class: 'card-img-top img-fluid') %>
    

    【讨论】:

    • 如果您使用 webpacker 提供图像,这将出错,因为默认值需要使用 image_pack_tag 而不是 image_tag 提供服务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2019-04-23
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多