以下是我用来避免硬编码会话变量的一些代码。无法在Ruby on Rails中将会话写入会话
#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?
你更新还设置一个局部变量,而不是调用的方法。尝试在'method1'中打印'@ some_var'。你会发现它与'var1'不同,这意味着'var1'是一个局部变量而不是方法调用。 – Mischa
绝对如此。为什么? –
因为它被设计成设置一个局部变量。 Ruby不知道你的意图,它必须做点什么。请参阅下面我的答案中的两个链接。 – Mischa