Как добавить вложение по умолчанию в рельсах Activestorage

У меня модель 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

Спасибо


person Nijeesh K J    schedule 12.06.2018    source источник


Ответы (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') %>
person Nimish Gupta    schedule 15.06.2018
comment
Это приведет к ошибке, если вы подаете изображения с помощью webpacker, поскольку значение по умолчанию нужно будет обслуживать с image_pack_tag, а не с image_tag - person Correlator; 25.01.2020