如何在Rails Activestorage中添加默认附件

6

我有一个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条件

谢谢

1个回答

13

如果您想在帖子中附加默认图像,但没有提供图像,则可以在回调函数中执行此操作。

# 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才能加载。 - Correlator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接