等号的方法在Rails中不起作用

时间:2014-03-31 17:21:56

标签: ruby-on-rails

我有一个带有一些虚拟方法的控制器来测试它为什么不工作(在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方法?

1 个答案:

答案 0 :(得分:2)

foo=称为self.foo=,如下所示。

  def bar
    self.foo=(33)
    puts "Session is #{session[:foo]}"
  end

如果没有self,则foo被视为local variable,并且从未调用方法foo=