#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
У меня есть хэш, подобный этому:
my_hash = {
"user_attributes" => {
"email" => "email@email.com",
"person_attributes" => {
"first_name" => "a_name",
"last_name" => "a_name"
}
}
}
Я хочу удалить все "person_attributes"
содержимое, поэтому я использовал:
my_hash.except("person_attributes")
Но это ничего не дает. Как я могу удалить вспомогательный хэш-ключ?
Комментарии:
1.
personal_attributes
Всегда ли он будет находиться в одном и том же месте в хэше (user_attributes -> personal_attributes)?2. Я думаю, что except — это конкретно функция rails, а не стандартная функция ruby
3.
except
не изменяет базовый хэш, поэтому вы либо используетеexcept!
, либо изменяете хэш самостоятельно4. Хорошо, я удалю тег ruby, извините
5. @YoannAugen не удаляйте тег ruby,
my_hash.tap { |x| x["user_attributes"].delete("person_attributes") }
здесь тоже есть правильный ответ ruby
Ответ №1:
Вам нужно будет использовать это, чтобы получить my_hash['user_attrbiutes'] except person_attributes
:
2.1.0 :010 > my_hash['user_attributes'].except('person_attributes')
=> {"email"=>"email@email.com"}
Чтобы получить результат в виде {"user_attributes"=>{"email"=>"email@email.com"}}
, вы можете использовать:
=> {"user_attributes"=>{"email"=>"email@email.com", "person_attributes"=>{"first_name"=>"a_name", "last_name"=>"a_name"}}}
2.1.0 :026 > my_hash['user_attributes'].delete('person_attributes')
=> {"first_name"=>"a_name", "last_name"=>"a_name"}
2.1.0 :027 > my_hash
=> {"user_attributes"=>{"email"=>"email@email.com"}}
Комментарии:
1. Я думаю, что возвращает только вспомогательный ключ user_attribute. Таким образом, вы потеряли ссылку на ключ «user_attributes», и если у вас есть другие ключи того же уровня, они тоже будут потеряны.
2. ожидаемый результат: {«user_attributes»=>{«email»=>»email@email.com «}}
3. обратитесь к изменениям 🙂
4. Хорошо, это тоже работает. Это и решение для комментариев my_hash.tap подходят для меня. Спасибо!