編集:うーん、これは興味があります。今気づいたのですが、私のサインアップ ルートは /signup です。しかし、情報を送信してフォームが無効を返すと、ルート /users にいます。
私は Rails を学習するための簡単なアプリを作成しており、認証システムのセットアップを学びました。
今日、新しいプラン テーブルを追加して、ユーザーごとに異なるサブスクリプションを作成しました。プラン モデルには多数のユーザーがいて、ユーザーはプランに属しています。これを実装した後、無効な情報を入力すると、ビューにエラー メッセージが表示されなくなりました。
application.html.erb ファイルに次のコードが表示されます -- >
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
他の通知では問題なく動作しますが、エラー メッセージは表示されません。
また、注意すべきことの 1 つは、たとえばメールを間違って入力した場合、Rails はそれが問題であることを赤で強調表示して表示することです (以前に CSS を編集してそれを行いました)。しかし、エラーメッセージ自体はどこにもありません:P
ここに私のユーザーコントローラがあります:
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:show]
before_filter :correct_user, only: [:show]
def show
@user = User.find(params[:id])
end
def new
plan = Plan.find(params[:plan_id])
@user = plan.users.build
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def index
if current_user
redirect_to(user_path(current_user))
else
redirect_to(root_path)
end
end
private
def signed_in_user
unless signed_in?
store_location
redirect_to login_url, notice: "Please sign in."
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
end
私はいくつかの調査を行いましたが、リダイレクトが原因である可能性があると人々は言っていますが、それを行っているかどうかはわかりません.
ただし、最初にサインアップにアクセスするときは、/signup?plan_id=1 の形式で、サインアップ フォームの plan_id を隠しフィールドに入力します。エラー画面が表示されると、plan_id がなくなっていますが、既に POST されているので問題ないと思います。それは何か関係がありますか?