質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

957閲覧

【Rails】CarrierWaveで画像がアップロードされない

karirin3948

総合スコア20

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/04/08 10:30

お世話になっております。
下記の現象について知見がある方がいらっしゃいましたらご教示お願いします。

#起きていること
CarrierWaveを使用して画像のアップロードを行いたいのですが、app/uploadersファイルに画像が格納されません。
なので【モデル名】.image.urlを実施しても画像が表示されません。
error

#試したこと1
アプリにて画像をアップロードした後にuploadsファイルを確認したところ、
post/imageファイルではなくtmpファイルに画像が格納されていました。
イメージ説明

image_uploader.rbでは下記のように記載されているのでpost/imageファイルに画像が格納されることを期待値としていました。

#image_uploader.rb class ImageUploader < CarrierWave::Uploader::Base storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end

#試したこと2
@postの渡されている値を確認したところimageカラムの値が渡されていませんでした。
イメージ説明

post_paramsにはimageカラムの値が渡されていました。
イメージ説明

#関連ファイル

#posts_controller.rb class PostsController < ApplicationController before_action :post_params, only: %i[confirm create] before_action :correct_user, only: :destroy def new @post = Post.new end def create @post = Post.new(post_params) @post.user = current_user @post.save! flash[:success] = '投稿されました。' redirect_to action: 'index' end def show @post = Post.find(params[:id]) end def confirm @post = Post.new(post_params) end def index @posts = Post.all @posts = Post.paginate(page: params[:page], per_page: 6) @like = Like.new end def destroy @post.destroy flash[:success] = '投稿が削除されました。' redirect_to request.referrer || root_url end private def post_params params.require(:post).permit(:store_name, :address, :image, :time_start, :time_end, :wifi, :plug, :tabacco, :card, :evaluation1, :evaluation2, :evaluation3, :evaluation4, :evaluation5) end def correct_user @post = current_user.posts.find_by(id: params[:id]) redirect_to root_url if @post.nil? end end
#posts/new.html.erb <%= form_for @post ,html: { class: "form-group" } do |form| %> <%= form.label :"カフェ" %> <%= form.text_field :store_name, id: :store_name ,class: "form-control",placeholder: "カフェの名前をご入力ください"%> <%= form.label :"住所" %> <%= form.text_field :address, id: :address ,class: "form-control",placeholder: "住所をご入力ください"%> <%= form.label :"カフェの画像" %><%= form.file_field :image %> <%= form.label :"営業時間"%><br> <%= form.time_field :time_start ,clsss: "bootstrap-timepicker"%> <%= form.label :"〜" %> <%= form.time_field :time_end %> <br><%= form.label :"環境" %> <div class="environment center" data-toggle="tooltip" title="Wi-Fi,充電,喫煙,クレジットカードの利用状況をご入力ください"> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default" > <%= form.check_box :wifi, {} , true, false %><%= image_tag 'wifi.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :plug , {} , true, false %><%= image_tag 'plug.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :tabacco , {} , true, false %><%= image_tag 'tabacco.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :card , {} , true, false %><%= image_tag 'card.png' , :size => '50x40'%> </label> </div> </div> <%= form.label :"評価" %> <div class="evaluation center" data-toggle="tooltip" title="評価を5段階でご入力ください"> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%# <%= form.check_box :evaluation, {} , true, false %><%#<%= image_tag 'star.png' , :size => '50x40'%> <%= form.check_box :evaluation1, {} , '1', nil %><%= image_tag 'star.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :evaluation2, {} , '1', nil %><%= image_tag 'star.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :evaluation3, {} , '1', nil %><%= image_tag 'star.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :evaluation4, {} , '1', nil %><%= image_tag 'star.png' , :size => '50x40'%> </label> </div> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <%= form.check_box :evaluation5, {} , '1', nil %><%= image_tag 'star.png' , :size => '50x40'%> </label> </div><br> </div> <br> <%= form.submit "投稿" %> </div> <% end %>
#posts/confirm.html.erb <%= form_for @post ,url: 'post/create' do |f|%> <table class="table"> <tr> <th>カフェの名前</th> <td> <%= @post.store_name %> <%= f.hidden_field :store_name %> </td> </tr> <tr> <th>住所</th> <td> <%= @post.address %> <%= f.hidden_field :address %> </td> </tr> <tr> <th>カフェの画像</th> <td> <%= image_tag @post.image.url, :size =>'300x250'%> <%= f.hidden_field :image %> </td> </tr> <tr> <th>営業時間</th> <td> <%= @post.time_start %> <%= f.hidden_field :time_start %> 〜 <%= @post.time_end %> <%= f.hidden_field :time_end %> </td> </tr> <tr> <th>環境</th> <td> <% if @post.wifi.present? %> <%= image_tag 'wifi.png' , :size => '50x40'%> <%= f.hidden_field :wifi %> <%end%> <% if @post.plug.present? %> <%= image_tag 'plug.png' , :size => '50x40'%> <%= f.hidden_field :plug %> <%end%> <% if @post.tabacco.present? %> <%= image_tag 'tabacco.png' , :size => '50x40'%> <%= f.hidden_field :tabacco %> <%end%> <% if @post.card.present? %> <%= image_tag 'card.png' , :size => '50x40'%> <%= f.hidden_field :card %> <%end%> </td> </tr> <tr> <th>評価</th> <td> <% if @post.evaluation1.present? %> <%= image_tag 'star.png' , :size => '50x40'%> <%= f.hidden_field :evaluation1 %> <%end%> <% if @post.evaluation2.present? %> <%= image_tag 'star.png' , :size => '50x40'%> <%= f.hidden_field :evaluation2 %> <%end%> <% if @post.evaluation3.present? %> <%= image_tag 'star.png' , :size => '50x40'%> <%= f.hidden_field :evaluation3 %> <%end%> <% if @post.evaluation4.present? %> <%= image_tag 'star.png' , :size => '50x40'%> <%= f.hidden_field :evaluation4 %> <%end%> <% if @post.evaluation5.present? %> <%= image_tag 'star.png' , :size => '50x40'%> <%= f.hidden_field :evaluation5 %> <%end%> </td> </tr> </tr> </table> <%= f.submit '投稿する'%> <% end %> <%= form_for @post, url: new_post_path do |f|%> <%= f.hidden_field :store_name %> <%= f.hidden_field :address %> <%= f.hidden_field :image %> <%= f.hidden_field :time_start %> <%= f.hidden_field :time_end %> <%= f.hidden_field :wifi %> <%= f.hidden_field :plug %> <%= f.hidden_field :tabacco %> <%= f.hidden_field :card %> <%= f.hidden_field :evaluation1 %> <%= f.hidden_field :evaluation2 %> <%= f.hidden_field :evaluation3 %> <%= f.hidden_field :evaluation4 %> <%= f.hidden_field :evaluation5 %> <%= f.submit '入力画面に戻る'%> <% end %>
#posts/index.html.erb <% provide(:title, '投稿一覧画面') %> <div class="row"> <div class="col-md-1"> </div> <div class="col-md-10"> <div class="Allpost"> <% @posts.each do |post| %> <a href="/post/<%= post.id %>"> <div class="Allpost_detail"> <div class="post_image"> <%= image_tag post.image.url, :size =>'130x130'%> </div> <div class="post_content"> <p>お店の名前:<%= post.store_name %></p> <p>住所:<%= post.address %></p> <p>営業時間:<%= post.time_start %>〜<%= post.time_end %></p> </div> </div> </a> <% end %> </div> </div> <div class="col-md-1"> </div> <%= will_paginate class: "center"%>
#models/post.rb class Post < ApplicationRecord belongs_to :user, optional: true has_many :likes (省略) mount_uploader :image, ImageUploader end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問