Ruby Params,为什么提取值需要双引号?

Ruby Params,为什么提取值需要双引号?,ruby,login,sinatra,Ruby,Login,Sinatra,我正在深入了解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? %>

我正在深入了解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来确定我们提交post请求时会发生什么时,我发现我将得到以下结果:

[1] pry(#<Sinatra::Application>)> params
{
    ":session" => {
           ":email" => "tasha@gmail.com",
        ":password" => "123"
    }
}
[1]撬动(#)>参数
{
“:会话”=>{
“:电子邮件”=>”tasha@gmail.com",
“:密码”=>“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>)> 
[2]pry(#)>params[:session]
无
[3] pry(#)>params[“:session”]
{
“:电子邮件”=>”tasha@gmail.com",
“:密码”=>“123”
}
[4] pry(#)>参数[:会话][:电子邮件]
NoMethodError:nil类的未定义方法“[]”
from(pry):31:in'block in'
[5] pry(#)>params[“:session”][“:email”]
"tasha@gmail.com"
[6] 撬动(#)>

注意当前参数散列中的键

params
{
    ":session" => {
           ":email" => "tasha@gmail.com",
        ":password" => "123"
    }
}
您需要访问参数中定义的键。例如:
“:session”


问题是哈希没有正确生成。

请注意当前参数哈希中的键

params
{
    ":session" => {
           ":email" => "tasha@gmail.com",
        ":password" => "123"
    }
}
您需要访问参数中定义的键。例如:
“:session”


问题是哈希没有正确生成。

请注意当前参数哈希中的键

params
{
    ":session" => {
           ":email" => "tasha@gmail.com",
        ":password" => "123"
    }
}
您需要访问参数中定义的键。例如:
“:session”


问题是哈希没有正确生成。

请注意当前参数哈希中的键

params
{
    ":session" => {
           ":email" => "tasha@gmail.com",
        ":password" => "123"
    }
}
您需要访问参数中定义的键。例如:
“:session”


问题是没有正确生成哈希值。

电子邮件的字段
name
是字符串
[:session][:email]
,该字符串被解析为哈希值,带有字符串类型键:

{
  ":session" => {
    ":email" => value
  }
}
这些字符串键以冒号开头。它们不是符号

params[:session]
将从
params[“session”]
中提取。这是因为符号的字符串版本不包括
前缀

:session.to_s #=> "session"
您可能只希望在模板中包含此内容

name="[session][email]"

电子邮件的字段
name
是字符串
[:session][:email]
,该字符串被解析为散列,带有字符串类型键:

{
  ":session" => {
    ":email" => value
  }
}
这些字符串键以冒号开头。它们不是符号

params[:session]
将从
params[“session”]
中提取。这是因为符号的字符串版本不包括
前缀

:session.to_s #=> "session"
您可能只希望在模板中包含此内容

name="[session][email]"

电子邮件的字段
name
是字符串
[:session][:email]
,该字符串被解析为散列,带有字符串类型键:

{
  ":session" => {
    ":email" => value
  }
}
这些字符串键以冒号开头。它们不是符号

params[:session]
将从
params[“session”]
中提取。这是因为符号的字符串版本不包括
前缀

:session.to_s #=> "session"
您可能只希望在模板中包含此内容

name="[session][email]"

电子邮件的字段
name
是字符串
[:session][:email]
,该字符串被解析为散列,带有字符串类型键:

{
  ":session" => {
    ":email" => value
  }
}
这些字符串键以冒号开头。它们不是符号

params[:session]
将从
params[“session”]
中提取。这是因为符号的字符串版本不包括
前缀

:session.to_s #=> "session"
您可能只希望在模板中包含此内容

name="[session][email]"

谢谢,我应该更改它的命名方式吗?是的,问题在于您在erb文件中添加的
前缀。请按照@AlexWayne的建议更新erb。这将解决不正确的密钥生成问题。谢谢,我是否应该更改命名方式?是的,问题在于您在erb文件中添加的
前缀。请按照@AlexWayne的建议更新erb。这将解决不正确的密钥生成问题。谢谢,我是否应该更改命名方式?是的,问题在于您在erb文件中添加的
前缀。请按照@AlexWayne的建议更新erb。这将解决不正确的密钥生成问题。谢谢,我是否应该更改命名方式?是的,问题在于您在erb文件中添加的
前缀。请按照@AlexWayne的建议更新erb。这将解决不正确的密钥生成问题。谢谢!!我想知道。出于某种原因,我看到人们喜欢将冒号放在括号内,但我想这是不必要的。你应该仔细阅读ruby中的理解很重要。谢谢!!我想知道。出于某种原因,我看到人们喜欢将冒号放在括号内,但我想这是不必要的。你应该仔细阅读ruby中的理解很重要。谢谢!!我想知道。出于某种原因,我看到人们喜欢将冒号放在括号内,但我想这是不必要的。你应该仔细阅读ruby中的理解很重要。谢谢!!我想知道。出于某种原因,我看到人们喜欢将冒号放在括号内,但我想这是不必要的。你应该仔细阅读ruby中理解冒号的重要性。