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

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

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

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

Q&A

解決済

1回答

393閲覧

投稿した画像が表示されない

tamtamtime

総合スコア8

Ruby on Rails

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

0グッド

0クリップ

投稿2023/02/24 07:45

編集2023/02/25 14:38

実現したいこと

投稿した画像の表示

前提

画像を投稿し、投稿時には画像が表示されるのですが
ブラウザを閉じて少しすると表示されなくなります。
Chromeの検証で、以下のエラーを確認しました。

発生している問題・エラーメッセージ

Failed to load resource: the server responded with a status of 404 ()

該当のソースコード

ruby

1app>views>designs>_design.html.erb 2 3<div class="card"> 4 <%= link_to image_tag( design.image, class: :card__img ), design_path(design.id), method: :get %> 5 <div class="card__body"> 6 <% if design.image.attached? %> 7 <% link_to design.title, design_path(design.id), method: :get, class: :card__title %> 8 <p class="card__summary"> 9 <%= design.title %> 10 </p> 11 <% end %> 12 </div> 13</div> 14

ruby

1app>views>designs>index.html.erb 2 3<main class="main"> 4 <div class="inner"> 5 6 <%= form_with(url: search_designs_path, local:true, method: :get, class:"search-form") do |form| %> 7 <%= form.text_field :keyword, placeholder:"検索する", class:"search-input " %> 8 <%= form.submit "検索",class: "form__btn search-btn" %> 9 <% end %> 10 11 <%= form_tag designs_path, method: :get do %> 12 <%= select_tag :tag_id,options_from_collection_for_select(Tag.all, :id, :tag_name, params[:tag_id]), {prompt: 'タグで絞り込み検索',class: "tag-search",onchange: 'submit(this.form);'}%> 13 <% end %> 14 15 <div class="card__wrapper"> 16 <%= render partial: 'design', collection: @designs %> 17 </div> 18 </div> 19</main>

ruby

1app>controllers>design_controller.rb 2 3class DesignsController < ApplicationController 4 before_action :authenticate_user!, only:[:edit, :new, :destroy] 5 before_action :move_to_index, except: [:index, :show] 6 before_action :set_design, only: [:show, :edit, :update, :destroy] 7 8 def index 9 @designs = Design.includes(:user).order("created_at DESC") 10 @designs = params[:tag_id].present? ? Tag.find(params[:tag_id]).designs : Design.all.order("created_at DESC") 11 end 12 13 def new 14 @post_form = PostForm.new 15 end 16 17 def create 18 @post_form = PostForm.new(design_params) 19 20 if @post_form.save 21 redirect_to root_path 22 else 23 render :new 24 end 25 end 26 27 def show 28 29 end 30 31 def destroy 32 design = Design.find(params[:id]) 33 if design.destroy 34 redirect_to root_path 35 end 36 end 37 38 def update 39 design = Design.find(params[:id]) 40 if 41 design.update(design_params) 42 redirect_to design_path(design.id) 43 else 44 redirect_to request.referer 45 end 46 end 47 48 def edit 49 unless user_signed_in? && current_user.id == @design.user_id 50 redirect_to action: :index 51 end 52 end 53 54 def search 55 @designs = Design.search(params[:keyword]).order("created_at DESC") 56 end 57 58 59 60 private 61 62 def design_params 63 params.require(:post_form).permit(:title, :file_name, :tag_name, :image).merge(user_id: current_user.id) 64 end 65 66 def set_design 67 @design = Design.find(params[:id]) 68 end 69 70 def move_to_index 71 unless user_signed_in? 72 redirect_to action: :index 73 end 74 end 75 76end

ruby

1app>models>design.rb 2 3class Design < ApplicationRecord 4 belongs_to :user 5 has_one_attached :image 6 has_many :post_tag_relations, dependent: :destroy 7 has_many :tags, through: :post_tag_relations 8 9 validates :title, presence: true 10 validates :file_name, presence: true 11 validates :image, presence: true 12 13 def self.search(search) 14 if search != "" 15 Design.where('title LIKE(?)', "%#{search}%") 16 else 17 Design.all 18 end 19 end 20 21 22 23end

ruby

1 2storage.yml 3 4test: 5 service: Disk 6 root: <%= Rails.root.join("tmp/storage") %> 7 8local: 9 service: Disk 10 root: <%= Rails.root.join("storage") %> 11 12# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key) 13# amazon: 14# service: S3 15# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> 16# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> 17# region: us-east-1 18# bucket: your_own_bucket 19 20# Remember not to checkin your GCS keyfile to a repository 21# google: 22# service: GCS 23# project: your_project 24# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %> 25# bucket: your_own_bucket 26 27# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key) 28# microsoft: 29# service: AzureStorage 30# storage_account_name: your_account_name 31# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %> 32# container: your_container_name 33 34# mirror: 35# service: Mirror 36# primary: local 37# mirrors: [ amazon, google, microsoft ] 38

試したこと

webで調べ、<% if design.image.attached? %> を追記しましたが表示されません。
デプロイ自体は問題ありませんでした。
ローカルでは表示問題ありません。

補足情報(FW/ツールのバージョンなど)

TablePlusには画像が登録されているので、登録自体は問題ないかと思います。
一度マイグレーションをリセットしたりもしたのですが解決せず
完全に行き詰まってしまいました。
どうかご教示お願いいたします。

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

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

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

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

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

maisumakun

2023/02/24 11:41

・Designのモデルをご提示ください。 ・サーバは何を使って、アップロードしたファイルはどこに配置していますか?
tamtamtime

2023/02/25 01:00

・モデルを追記いたしました。 ・サーバはRenderです。すみません、配置、というとどういう事でしょうか? 不勉強で申し訳ございません。
maisumakun

2023/02/25 03:27

> すみません、配置、というとどういう事でしょうか? アップロードした画像はどこかに保存しないといけないですが、どこへ保存するよう設定していますか?
tamtamtime

2023/02/25 04:49

Renderの内部データベースURLをdatabase.ymlで指定しております。 これがおかしいのでしょうか…?
maisumakun

2023/02/25 04:54 編集

ファイルアップロードを行う場合、ファイルの保存方法はstorage.ymlなどに設定を書きますが、そちらはどうなっていますか? (画像ファイルをデータベースに突っ込むことも技術的には可能ですが、一般的な実装ではなく、Rails標準で行えるものでもありません
tamtamtime

2023/02/25 05:27

storage.ymlを追記いたしました。 こちらは作成以来、ずっと触っていなかったファイルでした…。
guest

回答1

0

ベストアンサー

Renderのローカルディスクは基本的に一時的なもので、永続利用したい場合は相応の設定が必要です。

投稿2023/02/25 05:31

maisumakun

総合スコア145025

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

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

tamtamtime

2023/02/25 05:38

設定をよく読み込み、やってみます!ありがとうございます!!!! 本当に助かりました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問