前提・実現したいこと
ポートフォリオでカフェを登録できるようなもの作成をしている最中なのですがタイトルにもある通り
画像が表示されなくなることについて解決できず困っています。
具体的に経緯としては画像を登録した直後や少しの間は表示されるのですが時間が経過して再度
アクセスすると画像が表示されなくなってしまいます。
background imageやトップページにある画像等は表示されますがcrud処理の方でcreateで
画像を登録する方が表示されなくなります。
nameやaddressカラムは表示されます。
herokuで使用されているdbを確認してみましたがデータは登録されていました。
なにか原因のわかる方いましたらどうかお力を貸していただきたいです。
該当のソースコード
<%= render "shared/error_messages", obj: @cafe %> <%= form_with(model: cafe) do |form| %> <div class="cafe_form"> <div class="field"> <%= form.label :イメージ画像 %> <%= form.file_field :image %> </div> <div class="field"> <%= form.label :店名 %> <%= form.text_field :name %> </div> <div class="field"> <%= form.label :住所 %> <%= form.text_field :address %> </div> <div class="field"> <%= form.label :営業時間 %> <%= form.time_select :business_hours %> <%= form.time_select :end_business_hours %> </div> <div class="field"> <%= form.label :コンセント席数 %> <%= form.number_field :number_seats %> </div> <div class="field"> <%= form.label :wifi %> <%= form.check_box :wifi %> </div> <div class="actions"> <%= form.submit %> </div> <div class="back_link"> <%= link_to '戻る', caves_path %> </div> </div> <% end %>
<% provide(:title, "cafe") %> <%= render "shared/login_header" %> <div class="main"> <div class="search_cafe"> <%= search_form_for @q do |f| %> <div class="search_cafe_field"> <%= f.search_field :name_or_address_cont, :placeholder => "店名" %> </div> <%= f.submit "検索", class: "search_button" %> <% end %> </div> <div class="index_title">カフェ一覧</div> <div class="cafe_container"> <% @caves.each do |cafe| %> <div class="smaller_container"> <div class="cafe_information"> <div class="cafe_card"> <div class="cafe_img"> <% if cafe.image? %> <%= image_tag cafe.image.url %> <% else %> <p>画像なし</p> <% end %> </div> <div class="cafe_name"> <%= link_to cafe_path(cafe.id) do %> <%= cafe.name %> <% end %> </div> </div> </div> </div> <% end %> <%= paginate @caves %> </div> </div>
class ImageUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: include CarrierWave::RMagick # include CarrierWave::MiniMagick # 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 # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url(*args) # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) # # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # Process files as they are uploaded: # process scale: [200, 300] process :resize_to_limit => [700, 700] process :convert => 'jpg' # # def scale(width, height) # # do something # end # Create different versions of your uploaded files: version :thumb do process :resize_to_limit => [300, 300] end # Add an allowlist of extensions which are allowed to be uploaded. # For images you might use something like this: def extension_allowlist %w(jpg jpeg gif png) end # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. def filename super.chomp(File.extname(super)) + '.jpg' if original_filename.present? time = Time.now name = time.strftime('%Y%m%d%H%M%S') + '.jpg' name.downcase end end end
class CavesController < ApplicationController before_action :set_cafe, only: [:show, :edit, :update, :destroy] # GET /caves or /caves.json def index @q = Cafe.ransack(params[:q]) @caves = @q.result(distinct: true).page(params[:page]).per(8) end # GET /caves/1 or /caves/1.json def show end # GET /caves/new def new @cafe = Cafe.new end # GET /caves/1/edit def edit end # POST /caves or /caves.json def create @cafe = Cafe.new(cafe_params) @cafe.user_id = current_user.id respond_to do |format| if @cafe.save format.html { redirect_to @cafe, notice: "登録しました" } format.json { render :show, status: :created, location: @cafe } else format.html { render :new, status: :unprocessable_entity } format.json { render json: @cafe.errors, status: :unprocessable_entity } end end end # PATCH/PUT /caves/1 or /caves/1.json def update respond_to do |format| if @cafe.update(cafe_params) format.html { redirect_to @cafe, notice: "更新しました" } format.json { render :show, status: :ok, location: @cafe } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @cafe.errors, status: :unprocessable_entity } end end end # DELETE /caves/1 or /caves/1.json def destroy @cafe.destroy respond_to do |format| format.html { redirect_to caves_url, notice: "削除しました" } format.json { head :no_content } end end private def set_cafe @cafe = Cafe.find(params[:id]) end def cafe_params params.require(:cafe).permit(:image, :name, :address, :business_hours, :end_business_hours, :number_seats, :wifi, :user_id, :latitude, :longitude) end end
試したこと
heroku pg:psql -c "select * from caves;"
よりherokuで使用されているdbよりtableを確認してみたところデータは登録されています。
また、他のカラムであるnameやaddressは表示されることから画像の登録がうまくできていない
のかとは考えていますが根本的な原因の解明はできていません。
補足情報(FW/ツールのバージョンなど)
使用している環境やgemについてですが下記の通りです。
docker/docker-compose
rails/ruby
gem 'carrierwave'
gem 'rmagick'
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。