Назначить / заменить хэш параметров в рельсах
У меня есть последовательность кода ниже в действии контроллера рельсов. Перед IF, params содержит параметры запроса, как и ожидалось. После этого params равен нулю. Может кто-нибудь объяснить, что здесь происходит?
if false
params = {:user => {:name => "user", :comment => 'comment'}}
end
Спасибо.
1 ответ
params
который содержит параметры запроса, на самом деле является вызовом метода, который возвращает хеш, содержащий параметры. Ваш params =
линия присваивается локальной переменной с именем params
,
После if false
блок, Руби видел местный params
переменная, поэтому, когда вы ссылаетесь на params
позже в методе локальная переменная имеет приоритет над вызовом метода с тем же именем. Однако, потому что ваш params =
назначение находится в пределах if false
заблокировать локальную переменную никогда не присваивается значение, поэтому локальная переменная nil
,
Если вы попытаетесь обратиться к локальной переменной до ее присвоения, вы получите NameError:
irb(main):001:0> baz
NameError: undefined local variable or method `baz' for main:Object
from (irb):1
Однако, если есть присвоение переменной, которой нет в пути выполнения кода, то Ruby создал локальную переменную, но ее значение равно nil
,
irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil
См. Назначение - Локальные переменные и методы в документах Ruby.