Rails form_for неправильное действие контроллера

#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>