【发布时间】:2014-04-27 21:12:37
【问题描述】:
我正在深入研究 Sinatra 的登录过程。
Login.erb
<div id="flash" class="failure">
<h2> <%= flash[:failure] %> </h2>
</div>
<a href="/welcome">Go Back</a>
<% if @user.nil? == false %>
<% if @user.errors.any? %>
<%= erb 'shared/_error_messages'.to_sym %>
<form action="/users/signin" method="post">
<p> User Login</p>
<label> Email <input type="text" name="[:session][:email]"/> </label></br>
<label> Password <input type="password" name="[:session][:password]"/> </label></br>
<input type="submit" value="Log in">
</form>
<% end %>
<% else %>
<form action="/users/signin" method="post">
<p> User Login</p>
<label> Email <input type="text" name="[:session][:email]"/> </label></br>
<label> Password <input type="password" name="[:session][:password]"/> </label></br>
<input type="submit" value="Log in">
</form>
<% end %>
当我使用 binding.pry 来确定我们提交发布请求时会发生什么时,我看到我会得到以下信息:
[1] pry(#<Sinatra::Application>)> params
{
":session" => {
":email" => "tasha@gmail.com",
":password" => "123"
}
}
我知道我有一个带有键值对的散列。
我想知道为什么我需要在括号中的符号周围加上引号,而不是让它独立出来以提取值?另外,如果我在不带双引号的情况下命名它,为什么在我请求 pry 中的参数时要添加双引号?
[2] pry(#<Sinatra::Application>)> params[:session]
nil
[3] pry(#<Sinatra::Application>)> params[":session"]
{
":email" => "tasha@gmail.com",
":password" => "123"
}
[4] pry(#<Sinatra::Application>)> params[:session][:email]
NoMethodError: undefined method `[]' for nil:NilClass
from (pry):31:in `block in <main>'
[5] pry(#<Sinatra::Application>)> params[":session"][":email"]
"tasha@gmail.com"
[6] pry(#<Sinatra::Application>)>
【问题讨论】: