【问题标题】:Ruby on Rails Tutorial chapter 7.21, params[:user]Ruby on Rails 教程第 7.21 章,params[:user]
【发布时间】:2014-11-06 15:32:42
【问题描述】:

我是 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 是 hash 的 hash,但不知道 params[:user] 的含义。 :user 是什么意思? :user 代表用户模型还是只是一个变量名? :user 和 "user" 是什么关系?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    这里"user"是key,所以要访问这个key的值,我们写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 模型

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      阅读此Rails params explained? 在这里你会找到关于什么是 rails 中的 params 的解释。

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

      x = :my_str

      y = :my_str

      :my_str 只会被创建一次,并且 x 和 y 指向同一个内存区域。另一方面,如果你有

      x = "my_str"

      y = "my_str"

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多