#ruby #if-statement #each
#ruby #оператор if #каждый
Вопрос:
Я пытаюсь реализовать проверки на стороне сервера, для этого я получаю значения формы в переменной @value
@value = {"prev_school":{"name":"","class":"Nursery"},"sibling": {"name":""}}
@validate = {"prev_school":[{"name":["is_mandatory","is_alphabets"]}}
В @variable я определил методы, которые необходимо вызывать для каждого поля. Мой вопрос заключается в том, когда я запускаю следующий код
@value.each do |key,val|
@validate.each do |k,v|
if k == key puts v end
end
end
Я получаю сообщение об ошибке, указывающее на оператор if
syntax error, unexpected tIDENTIFIER, expecting kDO or '{' or '('
Может кто-нибудь, пожалуйста, помочь с этим.
Приветствия! 🙂
Ответ №1:
Вы хотите один из этих:
@value.each do |key,val|
@validate.each do |k,v|
if k == key
puts v
end
end
end
или
@value.each do |key,val|
@validate.each do |k,v|
puts v if k == key
end
end
Ваша версия является синтаксической ошибкой, потому что Ruby не знает, что вы хотите завершить if
between key
, и puts
поэтому он пытается интерпретировать key puts v
как аргумент for ==
, но запутывается.
Комментарии:
1. Большое спасибо, это было правильно! Это так долго ломало голову!
Ответ №2:
И вы должны определить хэш либо с помощью синтаксиса { «key» => «value» }, либо с помощью { key: value } — в Ruby 1.9. Итак, ваши переменные должны выглядеть так:
@value =
{
"prev_school" => {"name" => "", "class" => "Nursery"},
"sibling" => {"name" => ""}
}
@validate = {"prev_school" => [{"name" => ["is_mandatory","is_alphabets"]}]}
В @validate вы пропускаете ]
между двумя финалами }
.