Поскольку в последнем случае предполагается, что вы вызываете метод json
с блоком, а foo: 'bar'
является недопустимым оператором. * Т.е. 1003 *
json { foo: 'bar' }
анализируется (почти) так же, как
json do
foo: 'bar'
end
это ерунда. («почти», потому что приоритет скобок и do...end
немного отличается; не то, чтобы это имело значение в этом случае.)
В первом случае предполагается, что foo: 'bar'
является именованным аргументом и преобразуется в Hash
. json({ foo: 'bar' })
сделает очевидным, что вы передаете Hash
, а не пишете блок. Таким образом, ниже приведен правильный синтаксис того, что вы пытаетесь написать:
get '/initialize' do
json({
item1: {
item2: {
item3: 'ok'
}
}
})
end
Вы также можете использовать подход с использованием ключевых слов (хотя я считаю, что он менее читабелен):
get '/initialize' do
json item1: {
item2: {
item3: 'ok'
}
}
end