如果 html.erb 文件呈现时没有 Controller 中分配的变量(例如 @user = params["user_name"] )
那么为什么它将 @user
视为 nil
而不是抛出 NameError: undefined local variable
。
例如:
<%= render partial: "greeting", locals: { user: @user } if @user %>
如果 Controller 将 @user
传递给它,这将呈现问候语,但如果页面是第一次呈现并且用户尚未输入他们的用户名,那么问候语将不会在那里,而不是导致错误。在我看来,@user
永远不会在 html.erb 正在执行的本地范围内声明,因此它应该会导致错误。
这里发生了什么?也许 @
以某种方式进行了预处理,意味着将变量视为符号并将其用作 params
哈希中的键并返回结果?
最佳答案
未初始化的实例变量 (@...
) 的计算结果为 nil
。您仍然可以使用 defined?
方法检查实例变量是否已分配(包括分配给 nil
):
[1] pry(main)> defined? @test
=> nil
[2] pry(main)> @test = nil
=> nil
[3] pry(main)> defined? @test
=> "instance-variable"
关于ruby-on-rails - 为什么在 html.erb 中未声明的@variables nil 而不是 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196482/