0

私はレールにかなり慣れていないので、エラーが発生して「新しい」テンプレートがレンダリングされた場合にサインインするユーザーの URL を同じに保ちたいと考えています。

ここに私のルートがあります

resources :users, only: [:new, :create]
resources :sessions, only: [:new, :create, :destroy]

root to: 'pages#home'

match '/signin', to: 'sessions#new'
#match '/signin', to: 'sessions#create', via: :post, as: :post_session
match '/logout', to: 'sessions#destroy'

ここにセッションコントローラーコードがあります

def new
end

def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
        sign_in user
        redirect_to root_url
    else
        flash.now[:error] = 'Invalid email or password'
        render 'new'
    end
end

ご覧のとおり、投稿をキャッチするためにカスタム ルートをコメント アウトして、render 'new' 呼び出しが /signin URL を保持するようにしていますが、これを行うと、エラーのフラッシュ メッセージがページに表示されません (ただし、そのルートなしで行います)。now メソッドなしでフラッシュを使用しようとしましたが、メッセージが表示されませんでした。何か案は?

編集:

以下の提案を試してみましたが、まだ問題が発生していました。アクセスログを見ると、アプリケーションは最初のサインイン ルートにルーティングされていました。私の更新された作業ルートファイルは次のようになります

resources :users, only: [:new, :create]
#resources :sessions, only: [:new, :create, :destroy]

root to: 'pages#home'

match '/signin', to: 'sessions#new', via: :get
match '/signin', to: 'sessions#create', via: :post, as: :post_session
match '/logout', to: 'sessions#destroy', via: :delete
4

1 に答える 1

0

必要のない今を取り出してください。ルートが競合している可能性があります。マッチ ラインの設定方法に基づいて、おそらくresources :sessions完全に削除してから、マッチ ラインのコメントを外すことができます。それはあなたが必要とするものを処理するはずです。

また、必ず他の質問に戻って、いくつかの回答を受け入れてください。0% の受け入れ率は、回答を引き付ける可能性が低くなります。

編集

あなたのコメントに基づいて、リソースの呼び出しを削除した時点で何をレンダリングするかがわからない可能性があります。次のように変更してみてください:

render "sessions/new"
于 2012-08-23T20:03:51.143 に答える