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

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

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

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

Q&A

解決済

2回答

711閲覧

rails画像アップロードでエラー

yamada_yuuki

総合スコア100

Ruby on Rails

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

0グッド

1クリップ

投稿2019/11/03 08:39

https://www.sejuku.net/blog/65175のサイトで画像アップロードを実装していましたがエラーが出ました。
少し前、似たような質問をしましたが、(https://teratail.com/questions/218253)解決できませんでした。

error

1ActionView::Template::Error (Nil location provided. Can't build URI.): 2 20: <%= @ugblog.avatar_path %> 3 21: </p> 4 22: <p> 5 23: <%= image_tag @ugblog.avatar_path.url %> 6 24: </p> 7 25: 8 26: <%= link_to '修正', edit_ugblog_path(@ugblog) %> | 9 10app/views/ugblogs/show.html.erb:23:in `_app_views_ugblogs_show_html_erb__349685954_118284500'

formhtmlerb

1<%= form_with(model: ugblog, local: true) do |form| %> 2 <% if ugblog.errors.any? %> 3 <div id="error_explanation"> 4 <h2><%= pluralize(ugblog.errors.count, "error") %> prohibited this ugblog from being saved:</h2> 5 6 <ul> 7 <% ugblog.errors.full_messages.each do |message| %> 8 <li><%= message %></li> 9 <% end %> 10 </ul> 11 </div> 12 <% end %> 13 14 <div class="field"> 15 <div><%= form.label :タイトル %></div> 16 <div><%= form.text_area :title, {cols:40} %></div> 17 </div> 18 19 <div class="field"> 20 <div><%= form.label :サブタイトル %></div> 21 <div><%= form.text_area :subtitle, {cols:40, rows:5} %></div> 22 </div> 23 24 <div class="field"> 25 <div><%= form.label :本文 %></div> 26 <div><%= form.text_area :Text, {cols:40, rows:10} %></div> 27 </div> 28 29 <div class="field"> 30 <div><%= form.label :写真 %></div> 31 <div><%= form.file_field :avatar_path, id: :ugblog_avatar_path %></div> 32 </div> 33 34 <div class="actions"> 35 <%= form.submit "投稿する" %> 36 </div> 37<% end %>

showhtmlerb

1<p id="notice"><%= notice %></p> 2 3<p> 4 <strong>タイトル:</strong> 5 <%= @ugblog.title %> 6</p> 7 8<p> 9 <strong>サブタイトル:</strong> 10 <%= @ugblog.subtitle %> 11</p> 12 13<p> 14 <strong>本文:</strong> 15 <%= @ugblog.Text %> 16</p> 17 18<p> 19 <strong>写真:</strong> 20 <%= @ugblog.avatar_path %> 21</p> 22<p> 23 <%= image_tag @ugblog.avatar_path.url %> 24</p> 25 26<%= link_to '修正', edit_ugblog_path(@ugblog) %> | 27<%= link_to 'トップページへ', ugblogs_path %>

indexhtmlerb

1<p id="notice"><%= notice %></p> 2 3<h2>みんなのブログ</h2> 4<table> 5<tr> 6<th><%= link_to '投稿する', new_ugblog_path %></th> 7<th><%= link_to 'ログアウト'.html_safe, destroy_user_session_path, method: :delete %></th> 8</tr> 9</table> 10<hr> 11<h2>投稿記事</h2> 12<table> 13 <thead> 14 <tr> 15 <th>タイトル</th> 16 <th>サブタイトル</th> 17 <th>本文</th> 18 <th colspan="3"></th> 19 </tr> 20 </thead> 21 22 <tbody> 23 <% @ugblogs.each do |ugblog| %> 24 <tr> 25 <td><%= ugblog.title.truncate(15) %></td> 26 <td><%= ugblog.subtitle.truncate(15) %></td> 27 <td><%= ugblog.Text.truncate(20) %></td> 28 <td><%= link_to '詳しく見る', ugblog %></td> 29 <td><%= link_to '編集', edit_ugblog_path(ugblog) %></td> 30 <td><a href="javascript:delData(<%= ugblog.id %>);">削除 31 </a></td> 32 </tr> 33 <% end %> 34 </tbody> 35</table> 36 37 38<br> 39 40 41<script> 42function delData(num){ 43 if (confirm('このデータを削除しますか?')){ 44 document.location = "/ugblogs/delete/" + num; 45 } 46 return false; 47} 48</script> 49 50<hr>

controller

1class UgblogsController < ApplicationController 2 layout 'ugblogs' 3 before_action :set_ugblog, only: [:show, :edit, :update, :destroy] 4 5 # GET /ugblogs 6 # GET /ugblogs.json 7 def index 8 @ugblogs = Ugblog.all.order('created_at desc').limit(3) 9 end 10 11 # GET /ugblogs/1 12 # GET /ugblogs/1.json 13 def show 14 end 15 16 # GET /ugblogs/new 17 def new 18 @ugblog = Ugblog.new 19 end 20 21 # GET /ugblogs/1/edit 22 def edit 23 end 24 25 # POST /ugblogs 26 # POST /ugblogs.json 27 def create 28 @ugblog = Ugblog.new(ugblog_params) 29 30 respond_to do |format| 31 if @ugblog.save 32 format.html { redirect_to @ugblog, notice: 'Ugblog was successfully created.' } 33 format.json { render :show, status: :created, location: @ugblog } 34 else 35 format.html { render :new } 36 format.json { render json: @ugblog.errors, status: :unprocessable_entity } 37 end 38 end 39 end 40 41 # PATCH/PUT /ugblogs/1 42 # PATCH/PUT /ugblogs/1.json 43 def update 44 respond_to do |format| 45 if @ugblog.update(ugblog_params) 46 format.html { redirect_to @ugblog, notice: 'Ugblog was successfully updated.' } 47 format.json { render :show, status: :ok, location: @ugblog } 48 else 49 format.html { render :edit } 50 format.json { render json: @ugblog.errors, status: :unprocessable_entity } 51 end 52 end 53 end 54 55 # DELETE /ugblogs/1 56 # DELETE /ugblogs/1.json 57 def destroy 58 @ugblog.destroy 59 respond_to do |format| 60 format.html { redirect_to ugblogs_url, notice: 'Ugblog was successfully destroyed.' } 61 format.json { head :no_content } 62 end 63 end 64 65 private 66 # Use callbacks to share common setup or constraints between actions. 67 def set_ugblog 68 @ugblog = Ugblog.find(params[:id]) 69 end 70 71 # Never trust parameters from the scary internet, only allow the white list through. 72 def ugblog_params 73 params.require(:ugblog).permit(:title, :subtitle, :Text, :avatar_path) 74 end 75end 76

rails sを再起動してもだめでした。

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

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

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

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

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

guest

回答2

0

前回回答した縁で・・
写真をアップロードしなかった場合、@ugblog.avatar_path.url で取れる画像パスがnilを返しています。
nilが返ってきているのにimage_tagで表示させようとしているので今のエラーが発生しています。

画像がなければ表示させないような工夫をされることをオススメします。

投稿2019/11/04 06:10

8zca

総合スコア559

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

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

yamada_yuuki

2019/11/04 09:01

またの回答ありがとうございます。「写真をアップロードしなかった場合、@ugblog.avatar_path.url で取れる画像パスがnilを返しています。」とあるんですが画像を設定されています。しかしなぜ、nilが返ってくるんでしょうか。
guest

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問