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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

12060閲覧

Rails のredirect_to でエラーメッセージを出したいのですが

masaki7555

総合スコア34

Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2016/10/14 06:24

redirect_to :back ,notice: '入力されていない項目があります'

コントローラーで前ページに戻るように設定しているのですが、戻ったページでエラーメッセージを出したいです。
def create
@content = Content.new(create_params)
if @content.valid?

@content.save @@number = @@number + 1 if @@number == 19 @contents = Content.where(game_id:params[:game_id]) @@number = 1 @par = 0 @putts = 0 @score = 0 else redirect_to :back end else redirect_to :back ,notice: '入力されていない項目があります' end

end
ちなみにこれがメソッドの記述です。

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

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

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

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

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

hana-da

2016/10/14 09:53

redirect_to :back での遷移先となる view テンプレート(erbなど) を提示ください
guest

回答2

0

ベストアンサー

という事で flash メッセージの設定方法は間違えていませんので、表示されないのは遷移先のviewテンプレートに flash を表示する部分がないからだと思います。

msyk_tymさんも書いてくださっていますが flash メッセージを表示したいところに

erb

1 <%= flash[:notice] %>

とかけば大丈夫です。


msyk_tymさんも書かれていますが変数の扱いがrubyっぽくないです。
もし、まだ Ruby on Rails チュートリアル 実例を使ってRailsを学ぼう を試した事がなければ最初から順に試す事をオススメいたします。

投稿2016/10/14 15:47

hana-da

総合スコア1728

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

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

0

自分がよくやる手法としては、flashに入れますね。flashなら任意のパラメータを設定できるので、
エラーの切り分けも簡単にできます。
使い方は簡単で、

redirect_to index_path, flash: {error: 'メッセージ'}

とやればいけます。
ご提示されているコードを改修すると以下になります。

def create @content = Content.new(create_params) if @content.valid? @content.save @@number = @@number + 1 if @@number == 19 @contents = Content.where(game_id:params[:game_id]) @@number = 1 @par = 0 @putts = 0 @score = 0 else redirect_to :back end else redirect_to :back ,flash: {notice: "入力されていない項目があります"} end end

これで、リダイレクト先で、flash[:notice]で値が取れます。
あとは、View側で

<% if flash[:notice] %> <%= flash[:notice] %> <% end %>

ってやればエラーメッセージ出せます。

余談ですがクラス変数がめっちゃ使われているのが気になります。
クラス変数だと、もし違うアクションで同じ名前の変数を定義しちゃった時にデグレが発生する危険があるので、
バッドプラクティスだと思います。
インスタンス変数あるいはローカル変数を使いましょう。変数のスコープは狭いほど良いです。

投稿2016/10/14 15:21

msyk_tym

総合スコア39

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

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

hana-da

2016/10/14 15:32

redirect_to :back ,flash: {notice: "入力されていない項目があります"} これ redirect_to :back ,notice: "入力されていない項目があります" と書いても同じなんです。 標準では :alert と :notice だけなので error: 'エラーだよ' とかはダメですが、add_flash_typesすると :error も使えるようにできたりします。
msyk_tym

2016/10/14 15:34

そうなんですね。それは知らなかったです。 ただ、flashを明記すると任意のキーが使えるなら、やはりこちらを使用するのが良いのではないでしょうか。 add_flash_types使うと、キーを管理するのが面倒ではないかと思います。
hana-da

2016/10/14 15:40

どう書くかはお好みでよろしいかと思います。 happylife888o さんの redirect_to :back ,notice: '入力されていない項目があります' は間違いじゃないよ。という事が伝われば満足です。
masaki7555

2016/10/15 00:36

返信、遅くなり申し訳ありません。皆さんありがとうございます! 解決しました! やはり、クラス変数を多様するのはあまり良くないのですね。 少し違う方法を考えてみます! msyk_tymさん、hana_daさんありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問