0

私の Ruby on Rails アプリでは、ユーザーの認証が成功したときに、そのユーザーが所属するアカウントに基づいて特定のホームページに移動したいと考えています。

次のように、Sessionsコントローラーに「if」句を追加してみました:

def create
  if user = User.authenticate(params[:login], params[:password])
    session[:user_id] = user.id
    if user.account.name == "X"
      redirect_to Xhome_path, :notice => "Logged in successfully"
    else
      redirect_to home_path, :notice => "Logged in successfully"
    end
  else
    flash.now[:alert] = "Invalid login/password combination"
    render :action => 'new'
  end
end

routes.rb の既存の次​​の行をコピーします。

match '/home' => "users#home", :as => "home"

私はこれを追加しました:

match '/Xhome' => "users#Xhome", :as => "Xhome"

これは機能せず、次の結果が得られます。

  • user.account.name 'X' を持つユーザーがログインすると、ブラウザーに次のエラー メッセージが表示されます。

    NameError in SessionsController#create

    初期化されていない定数 SessionsController::Xhome_path

  • ただし、このユーザーが認証された後に mydomain.com/Xhome の URL を入力すると、正常に機能し、予想される Xhome ビューが表示されます。これは、ルート側に問題がないことを証明しているようです。

この NameError の問題がどこから発生するか知っていますか? home_path と同じように Xhome_path を使用できないのはなぜですか?

4

1 に答える 1

2

arake routesを実行して、使用可能なルート名とそれに対応するパス ヘルパーを確認します。パス名が実際に であるかどうかを確認しますXhome_path。パス名が存在しない場合は、

redirect_to '/Xhome', :notice => "Logged in successfully"
于 2013-10-31T18:34:31.390 に答える