死分支中的参数分配导致Rails中的参数为零

时间:2017-10-31 10:36:38

标签: ruby-on-rails ruby

这是控制器中的before_action:

def map_params
  Rails.logger.error "[before] #{params.inspect}"
  if false
    params = { :hi => :there }
  end
  Rails.logger.error "[after] #{params.inspect}"
end

这是一个输出:

[before] <ActionController::Parameters ...>
[after] nil

足够强烈,如果我注释掉params赋值,它的行为会有所不同:

[before] <ActionController::Parameters ...>
[after] <ActionController::Parameters ...>

为什么会这样?

1 个答案:

答案 0 :(得分:2)

因为您引入了params局部变量(即使您没有初始化它),它与params方法具有相同的名称。如果你将params称为params()self.params(告诉Ruby解释器你引用的是方法,而不是变量),在这两种情况下你都会看到ActionController::Parameters