ruby-on-rails - 为什么当我们访问视图中未定义的实例变量时,Rails 不会抛出异常?
问题描述
假设我们有以下实现:
应用程序/控制器/cars_controller.rb
class CarsControllers < ApplicationController
def index
@test = '7'
end
end
应用程序/视图/汽车/index.html.erb
My test variable is <%= @test %>.
Here is an undefined variable <%= @test2 %>.
为什么访问@test2 不会引发异常(假设我们正在尝试访问实例变量)?
解决方案
未定义的instance variable
值总是nil
,如果你访问它,它不会抛出任何异常,而局部变量如果没有定义它会抛出异常,如果你想检查实例变量是否被分配,你可以使用.present?
方法。
这是它的简单示例
Instance variable
2.5.1 :009 > @undefined
=> nil
2.5.1 :010 > @undefined.present?
=> false
2.5.1 :011 > defined? @undefined
=> nil
2.5.1 :014 > @defined = "test"
=> "test"
2.5.1 :015 > @defined.present?
=> true
2.5.1 :016 > defined? @defined
=> "instance-variable"
Local variable
2.5.1 :017 > undefined_local
Traceback (most recent call last):
1: from (irb):17
NameError (undefined local variable or method `undefined_local' for main:Object)
2.5.1 :018 > undefined_local.present?
Traceback (most recent call last):
1: from (irb):18
NameError (undefined local variable or method `undefined_local' for main:Object)
2.5.1 :019 > defined? undefined_local
=> nil
2.5.1 :020 > defined_local = "test"
=> "test"
2.5.1 :021 > defined? defined_local
=> "local-variable"
希望这足以理解这个概念
推荐阅读
- javascript - html网站中的倒计时时间刷新
- java - 在不超过给定能量的情况下跑一段距离的最短时间
- c# - 使用 .NET Core 2.1 创建新项目后 IIS 上的事件错误 9009
- reactjs - React:Iframe src 由 react-router 链接,而不是在公共文件夹中打开文件
- google-oauth - 请求 GoogleAdwords API 时出现错误 400 redirect_uri_mismatch
- google-cloud-platform - 扳手中的下一个数字
- javascript - Three.js中平面上的点
- matlab - 在MATLAB中,如何找到所有这些曲线下间隙中最高点的坐标位置?
- visual-studio - 为 VS 2017 中的测试保存默认处理器架构
- java - dex2jar 不是内部或外部命令、可运行程序或批处理文件