在特定位置时的实例变量 nil

Posted

技术标签:

【中文标题】在特定位置时的实例变量 nil【英文标题】:Instance variable nil when in certain location 【发布时间】:2016-11-04 19:28:07 【问题描述】:

我正在尝试在视图中使用控制器实例变量的值。变量的值将根据会话变量的值而改变。我正在对其进行测试,我注意到如果我将变量设置在特定位置,它总是显示为 nil。

我使用 Devise 进行身份验证,每次我在最后一个 Devise 函数之后设置变量时,它都会显示为 nil。但是当我把它放在其他任何地方时,它显示得很好。我只是觉得这很奇怪,想知道为什么会这样。除了我设置与 Devise 身份验证完全分开的实例变量外,其他一切都很好。

@prop 是我要设置的变量。如果我这样设置,当我尝试引用视图中的值时,它显示为 nil

def new
self.resource = resource_class.new(sign_in_params)      
clean_up_passwords(resource)        
yield resource if block_given?      
respond_with(resource, serialize_options(resource))
@prop = "test value"
end

但是当我在 respond_with 之前像这样或任何其他行设置它时,我会在视图中得到正确的值。

def new
@prop = "test value"
self.resource = resource_class.new(sign_in_params)      
clean_up_passwords(resource)        
yield resource if block_given?      
respond_with(resource, serialize_options(resource))
end

感谢

【问题讨论】:

【参考方案1】:

respond_with 正在触发响应者并渲染视图。当您在 respond_with 之后放置另一个变量时,视图将无法识别它。

【讨论】:

哦,所以respond_with 是触发视图渲染的原因。现在完全有道理,为什么以后设置的任何东西都不会出现。我有点认为是这样的原因,但由于我是 Rails 的新手,我想确定确切的原因是什么。非常感谢您的解释。

以上是关于在特定位置时的实例变量 nil的主要内容,如果未能解决你的问题,请参考以下文章

实例化的可选变量在 Xcode 调试器中显示为 nil

nil:NilClass 的未定义方法“每个”,但我使用了实例变量

Objective-C 中的实例变量是不是默认设置为 nil?

如果存在,计算变量返回 self,如果 nil 则返回新实例

XCTestCase 可选实例变量

类加载器实例化时的顺序