我有一个带有一些虚拟方法的控制器来测试它为什么不工作(在Rails 4中看到):
class Foo::BarController < ApplicationController
before_action :foo
protected
def foo
session[:foo] ||= rand(100)
bar
end
def foo=(n)
puts "Reassigning foo"
session[:foo] = n
end
def bar
foo=(33)
puts "Session is #{session[:foo]}"
end
当我访问继承自Foo::BarController
的控制器中的任何路由时,日志显示例如Session is 12
,永远不会评估foo=
方法。
如何启动此setter方法?
答案 0 :(得分:2)
将foo=
称为self.foo=
,如下所示。
def bar
self.foo=(33)
puts "Session is #{session[:foo]}"
end
如果没有self
,则foo
被视为local variable
,并且从未调用方法foo=
。