0

編集:うーん、これは興味があります。今気づいたのですが、私のサインアップ ルートは /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 されているので問題ないと思います。それは何か関係がありますか?

4

1 に答える 1

0

User問題は、表示されると予想されるエラー メッセージがオブジェクトのエラーであり、フラッシュに保存されていないことだと思います。ビューでこれを試してください:

<% @user.errors.full_messages.each do |error_message| %>
  <div class="alert"><%= error_message %></div>
<% end %>

詳細については、 ActiveModel::Errorsのドキュメントを参照してください。

于 2012-10-02T14:43:33.153 に答える