在特定位置时的实例变量 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的主要内容,如果未能解决你的问题,请参考以下文章
nil:NilClass 的未定义方法“每个”,但我使用了实例变量
Objective-C 中的实例变量是不是默认设置为 nil?