这是控制器中的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 ...>
为什么会这样?
答案 0 :(得分:2)
因为您引入了params
局部变量(即使您没有初始化它),它与params
方法具有相同的名称。如果你将params称为params()
或self.params
(告诉Ruby解释器你引用的是方法,而不是变量),在这两种情况下你都会看到ActionController::Parameters
。