前提・実現したいこと
Cloud9を用いてRuby on railsでのWebアプリケーション制作を学んでいます。
画像投稿画面(send_pictures.html.erb)から画像を投稿した後、詳細画面(detail_request.html.erb)に戻り投稿した画像が表示されているという形にしようとしています。
投稿画面で画像を選択し送信ボタンを押すと、以下のようなエラーが出てしまい
色々試してみましたが解決方法が見つからず困っています。
解決方法をどなたか教えてください。よろしくお願いします。
発生している問題・エラーメッセージ
エラーメッセージは以下の通りです。
NoMethodError in RequestsController#upload undefined method `date' for nil:NilClass FileUtils.mkdir_p("public/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}") unless FileTest.exist?("public/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}")
該当のソースコード
画像投稿画面(send_pictures.html.erb)
html
1<h4><%= @request.date %></h4> 2 3<%= form_tag("/requests/upload", {multipart: true}) do %> 4 <input type = "file" name = "pic1"> 5 <input class="button_signup" type="submit" value="送信"> 6<% end %>
詳細画面(detail_request.html.erb)
html
1<h4><%= @request.date %></h4> 2 3<% if @request.pic1 != nil %> 4 <% 5.times do |num| %> 5 <img src="<%= "/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}/#{@request.date}_#{num+1}.jpg" %>" width=20%> 6 <% end %> 7<% end %> 8<br> 9 10<%= link_to("画像送信", "/requests/upload/#{@request.id}") %>
requests_controller.rb
ruby
1class RequestsController < ApplicationController 2 def detail_request 3 @request = Request.find_by(id: params[:id]) 4 end 5 6 def send_pictures 7 @request = Request.find_by(id: params[:id]) 8 end 9 10 def upload 11 @request = Request.find_by(id: params[:id]) 12 13 FileUtils.mkdir_p("public/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}") unless FileTest.exist?("public/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}") 14 15 if params[:pic1] 16 @request.pic1 = "#{@request.date}_1.jpg" 17 pic1 = params[:pic1] 18 File.binwrite("public/pictures/#{@request.date.year}/#{@request.date.month}/#{@request.date.day}/#{@request.pic1}", pic1.read) 19 end 20 21 if @request.save 22 flash[:notice] = "画像を登録しました" 23 redirect_to("/requests/detail/#{@request.id}") 24 else 25 render("requests/send_picture") 26 end 27 end 28 29end
routes.rb
ruby
1Rails.application.routes.draw do 2 get 'requests/detail/:id' => 'requests#detail_request' 3 get 'requests/upload/:id' => 'requests#send_pictures' 4 post 'requests/upload' => 'requests#upload' 5end
試したこと
- 画像投稿画面に@request.dateを表示させてみたが、問題なく表示されていた。
- 保存先のフォルダ名を@request.idに変えてみたが
"undefined method `id' for nil:NilClass"
とエラーの対象が変わるだけでエラー内容は変わらなかった。
補足情報(FW/ツールのバージョンなど)
Rails 5.1.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/01 06:36
2018/02/01 07:00 編集
2018/02/01 09:19
2018/02/01 11:01
2018/02/02 02:18
2018/02/02 03:04