私はレールにかなり慣れていないので、エラーが発生して「新しい」テンプレートがレンダリングされた場合にサインインするユーザーの 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