以下是我用來避免硬編碼會話變量的一些代碼。無法在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