Ruby on Rails教程第7.21章,params [:user]

时间:2014-11-06 05:39:05

标签: ruby-on-rails

我是ROR的初学者,我读过第7.21章。

class UsersController < ApplicationController
  .
  .
  .
  def create
    @user = User.new(params[:user])    # Not the final implementation!
    if @user.save
      # Handle a successful save.
    else
      render 'new'
    end
  end
end 

提交表单以创建新用户时,params [:user]从表单中获取信息,并在调试信息中获取哈希值:

"user" => { "name" => "Foo Bar",
            "email" => "foo@invalid",
            "password" => "[FILTERED]",
            "password_confirmation" => "[FILTERED]"
          }

我知道params是哈希的哈希,但不知道params [:user]的含义。什么:用户是什么意思? :user表示User模型或只是变量名称?以下是什么关系:用户和&#34;用户&#34; ?

2 个答案:

答案 0 :(得分:1)

答案在你的问题中,你有这个哈希

"user" => { "name" => "Foo Bar",
            "email" => "foo@invalid",
            "password" => "[FILTERED]",
            "password_confirmation" => "[FILTERED]"
          }

此处,"user"是密钥,因此要访问此密钥的值,我们会写params["user"]params[:user],这将返回所有值,此处值为哈希,即

{ "name" => "Foo Bar",
  "email" => "foo@invalid",
  "password" => "[FILTERED]",
  "password_confirmation" => "[FILTERED]"
}

因此,在撰写@user = User.new(params[:user])时,您实际上正在传递密钥"user"的值,就像这样

@user = User.new({ "name" => "Foo Bar",
                   "email" => "foo@invalid",
                   "password" => "[FILTERED]",
                   "password_confirmation" => "[FILTERED]"
                })

是的,"user"是单数,如User模型

希望这有帮助!

答案 1 :(得分:0)

阅读此Rails params explained? 在这里你会找到有关轨道中的参数的解释。

:user是Symbol,“user”是string 在Ruby中,字符串是可变的,而符号是不可变的。这意味着只需要创建一个符号的副本。因此,如果你有

x =:my_str

y =:my_str

:my_str只会创建一次,而x和y指向相同的内存区域。另一方面,如果你有

x =“my_str”

y =“my_str”

包含my_str的字符串将被创建两次,x和y将指向不同的实例。

因此,符号通常用作Ruby中枚举的等价物,以及字典(哈希)的键。