[Rails] ActiveStorage를 사용하여 게시물에 아바타 표시

하고 싶은 일



Posts#index(이하 타임라인)에 아바타와 사용자 이름을 표시하고 싶습니다.

전제



devise 도입
ActiveStorage 도입
아바타를 사용자 모델에 추가

방법



posts 모델에 :avatarhas_one_attached 와 user 인스턴스 메소드 추가

post.rb
class Post < ApplicationRecord
  validates :content, {presence: true, length: {maximum: 140}}
  validates :user_id, {presence: true}

  has_one_attached :avatar

  def user
    return User.find_by(id: self.user_id)
  end
end

view에 .user 추가

index.html.erb
    <% @posts.each do |post| %>
    <div class="posts-index-item mb-20">
      <div class="posts-index-user">
        <!--avatar-->
        <div class="posts-index-img d-inline">
          <% if post.user.avatar.attached? %>
            <%= image_tag post.user.avatar, class: "avatar-index rounded-circle mx-auto" %>
          <% else %>
            <img class="avatar-index rounded-circle mx-auto" src="<%= "/images/default_user.png" %>" alt="Userimage">
          <% end %>
        </div>
        <!--username-->
        <div class="posts-index-username d-inline">
          <%= link_to post.user.username, users_show_path %>
        </div>
      </div>
      <!--content-->
      <%= link_to(post.content, "/posts/#{post.id}") %>
    </div>
  <% end %>

결과





요약



user 메소드에 의해 params의 사용할 수 없는 posts#index에서도 User 모델을 취급할 수 있다.
post.user.avatar

좋은 웹페이지 즐겨찾기