У меня есть следующий хэшПочему отказ не работает над моим хешем, хотя условие верно?
{"goes_by"=>[nil, ""], "middle_name"=>[nil, ""], "suffix"=>[nil, ""], "jersey"=>["8", "8A"]}
Я пытаюсь написать заявление, чтобы отказаться от каких-либо элементов, которые имеют вложенный массив с нулевым & «». Поэтому я написал следующую команду, чтобы попытаться выполнить это, но она возвращает nil
, как если бы не было никаких изменений в хэш ...
Player.find(286).audits.first.audited_changes.reject! {|x| x[1][0].blank? && x[1][1].blank? }
=> nil
но когда я распечатать результаты условие истинно для трех элементы. Что мне здесь не хватает?
Player.find(286).audits.first.audited_changes.each {|x| puts x[1][0].blank? && x[1][1].blank? }
true
true
true
false
=> {"goes_by"=>[nil, ""], "middle_name"=>[nil, ""], "suffix"=>[nil, ""], "jersey"=>["8", "8A"]}
ли '# audited_changes' построить хэш или получить доступ к переменной экземпляра? – aerook
переменная экземпляра, она хранится как часть записи для моего понимания. Если это помогает, то это часть драгоценного камня 'audited'. – daveomcd
Итак, '#reject!' Будет удалять только элементы из переменной экземпляра; он не будет делать никаких обновлений в базе данных. Вы вернетесь в базу данных, чтобы убедиться, что операция работала, и возвращает новый объект ruby со свежими значениями из базы данных. Попробуйте удержать экземпляр игрока и сохранить его после отклонения: 'player = Player.find (286)'; 'player.audits.first.audited_changes.reject! {# ...} '; 'player.audits.first.save'; – aerook