Вы, похоже, путаете метод params
для локальной переменной params
.
Давайте рассмотрим упрощенный пример:
def params
{"action" => "some-action"}
end
# the line below refers to the method #params
p params # {"action" => "some-action"}
# the variable params is created, but not assigned
params = {n: 1} if false
# any further reference to params will use the variable
p params # nil
Если у вас возник вопрос "Почему создается переменная?" простой ответ таков: потому что в документации говорится так.
Локальная переменная создается, когда синтаксический анализатор встречает назначение, а не когда это происходит:
a = 0 if false # does not assign to a
p local_variables # prints [:a]
p a # prints nil
Чтобы решить вашу проблему, либо используйте установщик #params=
(при условии, что он есть), либо извлеките результат метода в переменную, с которой нужно начинать, таким образом, все ссылки на params
ссылаются на переменную.
# assign using the setter method
self.params = { :n => @number }
# extract the contents to a variable at the start
# of the `post '/modify' do` block
params = self.params # or params()