登录表单如何在ror中运行?

时间:2016-10-07 09:40:30

标签: ruby-on-rails forms

我正在尝试学习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 && 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 %>

我想了解登录表单的工作原理。我明白,当我去/登录它会请求会话控制器和方法新的动作,但它如何知道我何时输入我的电子邮件和密码并按提交下一步做什么?在PHP中有。它如何在红宝石中起作用?

3 个答案:

答案 0 :(得分:2)

这是一个相当广泛的问题,但我会尝试解释你可能想知道的一些铁轨魔法。

首先,你应该仔细看看the viewhelper docs, especially form_tag。它将创建一个表单html标记,其中sessions_path作为第一个参数,do-block作为第二个参数。 sessions_path是一个视图帮助程序,由rails提供,因为您使用了

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

在您的路线中。它返回一个看起来像这个"/sessions"的字符串。你应该更好地看看this guide to understand rails routing

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

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

因此,提交只不过是提交给&#34; / sessions&#34;的常规html表单。 Rails会将一个帖子请求映射到&#34; / sessions&#34;到SessionsController #create方法,我们通过电子邮件和密码对用户进行身份验证,并在会话cookie中设置id

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

答案 1 :(得分:2)

除了Ninigi的好答案,我只想补充一点......

资源:仅限会话:[:new,:create,:destroy]

将生成您可以使用终端中的rake routes查看的路线。

另外form_tag等只是生成html的视图助手,只需在浏览器中使用inspect元素即可查看它已经完成的工作。

我会将此作为评论添加,但我还没有足够的声誉。

答案 2 :(得分:2)

理解这一点的一个非常好的起点将是Michael Hartl的Ruby on Rails Tutorial。它可以免费在线阅读。

有关登录/注册等信息,请参阅第7章。

逐步解释非常有用。

链接:https://www.railstutorial.org/book

欢迎来到RoR