这是我使用的一些代码,只是为了避免对 session 变量进行硬编码。
#application_controller
def redirect_to_new_order?
session[:redirect_to_new_order]
end
def redirect_to_new_order=(value)
session[:redirect_to_new_order] = value
end
#another_controller
#.............
def some_action
redirect_to_new_order = true
#viewed by debugger
# redirect_to_new_order? is equal to nil
# session[:redirect_to_new_order] is equal to nil as well
end
如您所见,由于某种原因,redirect_to_new_order?
和 session[:redirect_to_new_order]
为 nil
。
为什么会发生这种情况?
更新: 这是类似于上面给出的代码。但它确实调用了方法并且不创建局部变量。为什么?
class SomeClass
def initialize
@some_var = "999"
end
def var1
@some_var
end
def var1=(value)
@some_var=value
end
def method1
var1 = 111
puts var1
puts @some_var
end
end
a = SomeClass.new
a.method1 # prints 111 and 999 but why?
最佳答案
原因是您没有调用 redirect_to_new_order=
方法。相反,您将局部变量 redirect_to_new_order
设置为 true 值。作为健全性检查,将 raise "BOOM"
行添加到赋值方法中,您将看到该方法未被调用。
您需要一个显式接收器,否则您将在 Controller 中设置局部变量。
self.redirect_to_new_order = true
就可以了。
关于ruby-on-rails-3.2 - 无法在 Ruby on Rails 中将变量写入 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253478/