#ruby-on-rails #forms #routes #railstutorial.org
#ruby-on-rails #формы #маршруты #railstutorial.org
Вопрос:
Прямо из руководства по Rails. Я не могу получить форму входа для вызова метода create. Отладка показывает, что она вызывает только новое действие. У меня не было проблем с настройкой пользователей, у которых также есть база данных, поэтому было использовано следующее:
<%= form_for @user do |f| %>
В этом случае, без модели, я делаю так, как предлагает учебник:
<%= form_for(:session, url: sessions_path) do |f| %>
Быстрый взгляд на маршруты рейка показывает, что маршрут действителен:
Prefix Verb URI Pattern Controller#Action
root GET / site_pages#root
about GET /about(.:format) site_pages#about
signup GET /signup(.:format) users#new
signout DELETE /signout(.:format) sessions#destroy
signin GET /signin(.:format) sessions#new
users POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user GET /users/:id(.:format) users#show
DELETE /users/:id(.:format) users#destroy
sessions POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
session DELETE /sessions/:id(.:format) sessions#destroy
Не уверен, чего мне не хватает. Возился с этим более часа. Попытался изменить form_tag, и он по-прежнему реагирует таким же образом. Я отредактировал маршруты и форму несколькими способами, чтобы запустить правильное функционирование, но безуспешно.
Чего мне не хватает? Спасибо.
Добавлен контроллер:
def create
user = User.find_by(email: params[:session][:email].downcase)
if user amp;amp; user.authenticate(params[:session][:password])
#SIGN IN AND REDIRECT
else
flash.now[:danger] = "Invalid Submission. Please Try Again."
render 'new'
end
end
Комментарии:
1. Считайте это неразгаданной загадкой Rails. Я изменил: <%= f.отправить «Войти», класс: «btn btn-primary btn-width-30» %> на: <%= f.отправить %> И это сработало. Затем я изменил его обратно, и он все еще работал. Понятия не имею.
2. Вы всегда можете опубликовать явно метод: :post для вашего
form_for
, чтобы не вызывать метод get:form_for(:session, url: sessions_path, method: :post)
3. Почему бы не использовать Devise gem?
4. Скоро доберусь, Майкл.
Ответ №1:
<div class="form-horizontal" role="form">
<%= form_for(:session, url: sessions_path) do |f| %>
<%= render 'layouts/flash' %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Log In", class: "btn btn-primary btn-width-30" %>
<% end %>
</div>