@Tarzan3154

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Rails】画像をリサイズしてアップロード

解決したいこと

Railsで自己紹介ページに写真投稿&いいねができる機能を付け、共有できるサービスを作成しておりました。画像の縦横比を維持したまま、 width を最大 300px、height を最大 200 pxにリサイズしたい為、下記の通り実装後、写真アップロードの画面(posts/new.html.erb)で写真を選択して投稿しようとしたところ、下記のエラー表示が出るようになり、投稿できなくなってしまいました。(image_uploader.rbの5行目にprocess resize_to_fit: [300, 200]を追加前は特大の画像が投稿できていた)
※Gemfileにgem 'carrierwave'およびgem 'mini_magick'を追加し、bundle install済み

発生している問題・エラー

image.png
※posts/index.html.erb上でこちらの表示が出ます。

該当するソースコード

post.rb

class Post < ApplicationRecord
  mount_uploader :image, ImageUploader
end
image_uploader.rbの一部分

class ImageUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  include CarrierWave::MiniMagick
  process resize_to_fit: [300, 200]

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
posts/new.html.erb

<div class="center jumbotron">
  <div class="text-center">
    <h2>写真アップロード</h2>
  </div>
</div>

<%= render 'form', post: @post %>

<%= link_to 'Back', posts_path %>
posts/show.html.erb

<p id="notice"><%= notice %></p>

<p>
  <strong>Image:</strong>
  <%= image_tag @post.image.url if @post.image? %>
</p>

<%= link_to 'Edit', edit_post_path(@post) %>
<%= link_to 'Back', user_path(current_user) %>
posts/index.html.erb

<p id="notice"><%= notice %></p>

<h1>Posts</h1>

<table>
  <thead>
    <tr>
      <th>Image</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.image %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Post', new_post_path %>
_form.html.erb

<%= form_with(model: post, local: true) do |form| %>
  <% if post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% post.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :image %>
    <%= form.file_field :image %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

自分で試したこと

GraphicsMagickをインストールしてみましたが、インストール方法が悪かったのか、症状変わりませんでした。

0 likes

webアプリとしてではなくrailsのコンソールからまずはやってみたほうがデバックしやすいと思います。

$ rails c
> post = Post.new(...)
> ...
> post.image = Pathname("/テスト用の/画像/ファイル/パス.jpg").open
> post.save!
0Like

Your answer might help someone💌