Ваша проблема заключается в следующем: пользователь сначала заходит на /login
и заполняет форму. Когда они отправляют форму, они отправляют на /sessions
, поэтому URL браузера изменяется. Чтобы обойти это, вы можете сделать две вещи:
Как упоминал Майкл, вы можете перенаправить обратно на: новое действие, изменив остальное на:
else
flash[:warning] = "The email and/or password you entered is invalid."
redirect_to login_path
end
Обратите внимание, что вам нужно изменить флэш-память, чтобы сообщение было доступно в следующем запросе (после перенаправления).
Второй метод немного более хакерский, но, возможно, стоит упомянуть. Используя условия на ваших маршрутах, вы можете сопоставить как форму входа (которая является GET), так и форму отправки (которая является POST) по одному и тому же пути. Что-то вроде:
map.login '/login',
:controller => 'sessions', :action => 'new',
:conditions => {:method => :get}
map.login_submit '/login',
:controller => 'sessions', :action => 'create',
:conditions => {:method => :post}
Тогда, если ваше действие формы - это путь входа в систему, все должно работать так, как вы ожидаете.