如何在 rails Activestorage 中添加默认附件
How to add a default attachment in rails Activestorage
我有一个模型 Post
has_one_attached :cover
不需要附件。
那么,有什么方法可以添加默认附件,即使用户没有提供附件也是如此。
因此,当显示 post 时,我可以显示封面图像。
<% 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条件
谢谢
如果您想将默认图像附加到 post(如果不存在),则可以在回调中执行此操作
# 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') %>
或者,如果您不想将默认封面附加到 post 但仍想在 post 的显示页面上显示图片
# 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') %>
我有一个模型 Post
has_one_attached :cover
不需要附件。 那么,有什么方法可以添加默认附件,即使用户没有提供附件也是如此。
因此,当显示 post 时,我可以显示封面图像。
<% 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条件
谢谢
如果您想将默认图像附加到 post(如果不存在),则可以在回调中执行此操作
# 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') %>
或者,如果您不想将默认封面附加到 post 但仍想在 post 的显示页面上显示图片
# 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') %>