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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

942閲覧

パラメータをコントローラーで検証してエラーメッセージを表示したい

Monovate

総合スコア16

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/02/01 04:47

前提・実現したいこと

import_zipからPOSTされたデータがzipファイルならば処理を実行。
zipファイルでなければエラーメッセージを追加して元のページに戻って表示したいです。

該当のソースコード

ruby

1def import_zip 2 @photo = Photo.new 3 if request.post? 4 zipfile = params[:zip] 5 if zipfile.content_type == "application/zip" 6 Zip::File.open(zipfile.path) do |zip| # ZipモジュールFileオブジェクトの生成 7 logger.debug(zip) # "1.zip" 8 zip.each do |entry| # .zipとった形 9 entry_name = entry.name.split("/")[0] # ユーザをセットするためにフォルダ名を取得する。("13/"の形で返ってくる) 10 ext = File.extname(entry.name) # 拡張子を取得 / ファイルが画像かどうか file_type指定 include? 11 @user = User.where("id = ?", entry_name) # フォルダと同じIDのユーザをセット 12 next if @user.blank? # ユーザがいなかったら次のループへ 13 next if ext.blank? || File.basename(entry.name).count(".") > 1 # フォルダか隠しファイルなら次のループへ 14 tmp_file_path = "tmp/#{File.basename(entry.to_s)}" # 作業するファイルのパスを格納 15 entry.extract(tmp_file_path) { true } # ファイルそのものをパスに当てはめる 16 logger.debug(tmp_file_path) # tmp/#{file_name}.#{ext} 17 file = File.open(tmp_file_path) # ファイルを開いてFileオブジェクトとしてfileに格納 18 @user = @user.first.photos.build(image: file) # 該当ユーザに紐づく画像を保存 19 @user.save 20 end 21 end 22 else 23 @zip_error = "zipファイル以外のファイルが選択されています!" 24 redirect_to import_zip_users_path 25 return 26 end 27 redirect_to users_path 28 end 29end

html

1<h1>Zip Upload</h1> 2<%= form_tag(import_zip_users_path,{:multipart => true}) do %> 3 <% if !@zip_error.nil? %> 4 <div id="error_explanation"> 5 <h2>prohibited this user from being saved:</h2> 6 7 <ul> 8 <li><%= @zip_error %></li> 9 </ul> 10 </div> 11 <% end %> 12 <div class="field"> 13 <%= file_field_tag :zip %> 14 </div> 15 16 <div class="actions"> 17 <%= submit_tag("Upload") %> 18 </div> 19<% end %> 20<%= link_to :Back, users_path %>

試したこと

@zip_errorにエラーメッセージを代入しましたが表示されません。

ご回答よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

自己解決

redirect_toの部分をrenderに変えたら表示されました!

投稿2018/02/01 04:51

Monovate

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問