kouの技術的メモ

学習した内容の定着やアウトプット用に開設しました

成果物の作成9 ユーザ画像登録機能、表示機能の実装

ユーザーページに画像が表示されておらず少し寂しいので、

ユーザー登録画面で画像をアップロードし、プロフィールページや、記事の投稿で表示できるようにします。

carrierwaveを利用し、

画像アップロードは

ユーザー画像登録部分の追加

ユーザー新規登録ページ(/signup)のフォームで画像をpostできるように追加します

view/users/new.html.erb

  <%= form_for(@user, url: signup_path) do |f| %>
.
.
.
      <span class="picture">
        <%= f.label :picture %>
        <%= f.file_field :picture %>
      </span>
.
.
<% end %>
<%= render 'shared/picture_size' %>

と追加します。

最後の行でJQueryによる画像サイズチェックコードは記事投稿ページでも同じものを使っているので、パーシャル化してrenderしています。

views/shared/picture_size

<script type="text/javascript">
  $('#post_picture').bind('change', function() {
    var size_in_megabytes = this.files[0].size/1024/1024;
    if (size_in_megabytes > 5) {
      alert('Maximum file size is 5MB. Please choose a smaller file.');
    }
  });
</script>
画像表示部

記事一覧表示画面views/posts/show.html.erb、

記事詳細表示画面viewsposts/_post.html.erbの投稿者の横に表示するようにします。

views/posts/show.html.erbviews/posts/_post.html.erbに 以下を追加

<div class="card-footer">
    <%= image_tag @post.user.picture.url,:size =>'30x30' if @post.user.picture? %>
 投稿者<%= link_to @post.user.name, user_path(@post.user.id) %>  - 投稿日時<%= simple_time(@post.created_at) %>
</div>

画像は大きくても見苦しい為、30*30で表示するように調整しておきました。

そしてテストを書いて、gitとherokuにpushして完成です