Ошибка при выполнении.каждый цикл в ruby

#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 вы пропускаете ] между двумя финалами } .