Как форма входа работает в ror?

#ruby-on-rails #forms

#ruby-on-rails #формы

Вопрос:

Я пытаюсь изучить Ruby on Rails. Я следовал руководству YouTube, чтобы создать простую аутентификацию в ruby. Все работает нормально, но я не могу этого понять.

У меня есть маршруты

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

get 'signup', to: 'users#new', as: 'signup'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'
  

У меня есть контроллеры для сеансов и пользователей

sessions_controller

 def new
end

def create
  user = User.find_by_email(params[:email])
  if user amp;amp; user.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to root_url, notice: 'Logged in !'
  else
    render :new
  end
end

def destroy
  session[:user_id] = nil
  redirect_to root_url, notice: 'Logged out!'
end
  

и мои просмотры / сеансы / new.html.erb

 <h1>Log In</h1>
<%= form_tag sessions_path do %>
<div class="field">
<%= label_tag :email %><br>
<%= text_field_tag :email %>
</div>
 <div class="field">
   <%= label_tag :password %><br>
<%= password_field_tag :password %>
</div>
 <div class="actions">
  <%= submit_tag "Log In" %>
</div>
<% end %>
  

Я хочу понять, как работает моя форма входа. Я понимаю, что когда я захожу в / login, он запрашивает действие у контроллера сеанса и метода new, но как он узнает, когда я ввожу свой адрес электронной почты и пароль и нажимаю отправить, что делать дальше? В php есть . Как это работает в ruby?

Комментарии:

1. In php there is . не могли бы вы уточнить, пожалуйста? ^^

2. Извините, я хотел вставить: в php есть <form action=»/sessions» method=»post»>

Ответ №1:

Это довольно широкий вопрос, но я попытаюсь объяснить некоторые из rails-magic, которые вы, вероятно, захотите узнать.

Во-первых, вам следует более внимательно ознакомиться с документами viewhelper, особенно form_tag . Он создаст html-тег формы с sessions_path в качестве первого аргумента и do-block в качестве второго. sessions_path является ли вспомогательным средством просмотра, предоставляемым rails, потому что вы использовали

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

в ваших маршрутах. Он возвращает строку, которая должна выглядеть следующим "/sessions" образом . Вы должны взглянуть на это руководство, чтобы лучше понять маршрутизацию rails.

 <%= form_tag sessions_path do %>
  ...
<% end %>
  

это то же самое, что

 <form action="/sessions" method="post">
  ...
</form>
  

Итак, отправка — это не что иное, как обычная html-форма отправки в «/ sessions». Rails сопоставит запрос post с «/ sessions» методу SessionsController #create, где мы аутентифицируем пользователя по электронной почте и паролю и устанавливаем идентификатор в сеансовом файле cookie

 if user amp;amp; user.authenticate(params[:password])
  session[:user_id] = user.id
  # ...
  

Комментарии:

1. Единственное, чего я не понимаю, это откуда он знает, что ему нужно использовать метод SessionsController#create, а не какой-либо другой метод?

2. Хорошо, если я введу rake routes, я увижу, что путь /sessions сопоставлен с sessions#create

3. Потратьте некоторое время, чтобы прочитать это, и вы поймете, как он знает, какой контроллер и действие загружать: guides.rubyonrails.org/routing.html

4. Спасибо @Chris Peters, подойдет

Ответ №2:

В дополнение к хорошему ответу Ninigi я просто хотел добавить это…

ресурсы: сеансы, только: [:создать, :создать,:уничтожить]

будет генерировать маршруты, которые вы можете просмотреть, используя rake routes в терминале.

Кроме того, form_tag и т. Д. — Это просто помощники для просмотра, которые будут генерировать html, Просто используйте inspect element в вашем браузере, чтобы увидеть, что он сделал.

Я бы добавил это в качестве комментария, но у меня пока недостаточно репутации.

Ответ №3:

Очень хорошей отправной точкой для понимания этого будет книга «Учебник по Ruby on Rails» Майкла Хартла. Его можно бесплатно читать онлайн.

См. Главу 7 и далее для входа / регистрации и т. Д.

Пошаговые объяснения очень полезны.

Ссылка: https://www.railstutorial.org/book

и добро пожаловать в RoR