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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

179閲覧

Railsのモデルのバリデーションでのエラーメッセージを表示するとURLが変わってしまう件について。。

crypto_chrono

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

2クリップ

投稿2018/01/12 01:16

編集2018/01/12 07:32

Railsのモデルのバリデーションでのエラーをrenderで表示するとURLが変わってしまうので、リロードした時にエラーが起きてしまいます
すみません、追記です。
URLが
/users/new
から
/users
になると言うことです。
なので、リロードすると
アクションがないとエラーが出ます。
これを綺麗に解決したいです。

ruby.

1Rails.application.routes.draw do 2 root "users#index" 3 resources :users, shallow: true do 4 resources :orders, only: [:index] do 5 collection do 6 get :select 7 get :manual_select 8 get :manual_new 9 post :manual_create 10 end 11 end 12 end 13 resources :sessions, only: [:new, :create, :destroy] 14end 15

slim

1.row 2 .col-xs-12.col-md-4 3 .col-xs-12.col-md-4 4 .panel.panel-default 5 .panel-heading 新規登録 6 .panel-body 7 = form_for @user do |f| 8 .form-group 9 = f.label "Email" 10 = f.email_field :email,class: "form-control", required: :required, placeholder: "Email" 11 = f.label "姓" 12 = f.text_field :family_name, required: :required,class: "form-control", placeholder: "姓" 13 = f.label "名" 14 = f.text_field :first_name, required: :required,class: "form-control", placeholder: "姓" 15 = f.label "パスワード" 16 = f.password_field :password, required: :required,class: "form-control", placeholder: "6文字以上" 17 = f.label "パスワード再入力" 18 = f.password_field :password_confirmation,class: "form-control", required: :required, placeholder: "6文字以上" 19 = f.submit "送信", class: "btn btn-primary btn-lg btn-block" 20 = link_to "ログイン", new_session_path, class: "btn btn-default btn-lg btn-block" 21 = link_to auth_at_provider_path(provider: :twitter), class: "btn btn-block btn-social btn-lg btn-twitter" 22 i.fa.fa-twitter 23 .sns-title = "Twitterログイン" 24 = link_to auth_at_provider_path(provider: :facebook), class: "btn btn-block btn-social btn-lg btn-facebook" 25 i.fa.fa-facebook 26 .sns-title = "Facebookログイン" 27

ruby.

1 def create 2 @user = User.new(user_params) 3 if @user.save 4 #成功した時 5 else 6 render "new" 7 end 8 end

具体的には上記のような場合です。
URLを変更せずにエラーメッセージを表示させるナイスな方法はありませんでしょうか?

redirectの場合だと綺麗にメッセージが渡せずに悩んでいます。

宜しくお願い致します

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

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

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

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

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

togino77

2018/01/12 04:48

URLが変わってしまうというのは,/users/new から /users になるという意味でしょうか.加えて,リロードした時にエラーが起きるとありますが,どのようなエラーでしょうか.
togino77

2018/01/12 07:02

ルーティングエラーとのことですが,POST /users によって UsersControler#create が実行され,そこでエラーが発生し render "new" した画面でリロードを押しても,再度 POST /users されるだけなので,ルーティングエラーが起こるということが考えられません.エラーが発生する手順やエラー詳細など記載してもらえますか
crypto_chrono

2018/01/12 07:07

すみません、修正しました!
togino77

2018/01/12 07:28

config/routes.rb と app/views/users/new.html.erb の内容の掲載は可能でしょうか.こちらで,質問内容に記載のものでサンプルプロジェクトを作成し動かしてみましたが,ブラウザのアドレス欄にあるURLが変わってしまっても,エラーが発生することなくリロードできております.
crypto_chrono

2018/01/12 07:33

なん度もすみません。このようになっています。
togino77

2018/01/12 07:46

こちらこそすみません.時間の都合により回答が夜になります.
crypto_chrono

2018/01/12 07:48

わざわざ調べていただいてすみません。ありがとうございます!いつでも大丈夫です!
guest

回答2

0

ベストアンサー

仕様です

redirectではメッセージを出すことはできますが
ユーザーの入力途中の内容は消えてしまうためとても不便です

アクションがないエラーを避けたいなら /users で実行される indexアクションを使わないという宣言を
routingにすればただの404エラーになります

resources :users, shallow: true, except: :index do end

投稿2018/04/19 05:45

編集2018/04/19 05:51
Ighrs

総合スコア656

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

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

0

逆質問になってしまいますがUserControllerの
newアクションにリダイレクトすることに問題があるということですか?

投稿2018/01/23 23:04

ReiLeiLei1025

総合スコア236

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

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

crypto_chrono

2018/04/17 07:27

エラーメッセージを出す際に、renderですとうまく表示されるんですが、リダイレクトだとredirect〇〇, danger: "#{ @user.errors.full_messages.to_sentence }" という風に設定して表示しれるんですけど、いいエラーメッセージの表示の仕方知ってますか?
ReiLeiLei1025

2018/04/17 12:43

flash[:notice]とかflash[:alert]などを自分は使っています。 flash.nowでなけれれば次のリクエストまで持ち込まれるはずです。 そういう話ではないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問