Utilisation de rails 4.2. J'ai ce qui suit:

place_details = {
  name: "abc",
  address_components: [
    { long_name: "Nevada", short_name: "NV", types: ["administrative_area_level_1", "political"] }, 
    { long_name: "United States", short_name: "US", types: ["country", "political"] }
  ]
}

place.tap do |pl|
  pl.name = place_details.dig(:name)
  place_details.dig(:address_components).each do |component|
    pl.component.dig(:types).first = component[:long_name]
  end
end

Attendue:

place.tap do |pl|
  pl.name = "abc"
  pl.administrative_area_level_1 = "Nevada"
  pl.country = "United States"
end

La ligne pl.component.dig(:types).first = component[:long_name] ne fonctionne pas, pour des raisons évidentes.

Ce que je veux:

  • possibilité d'attribuer des valeurs
  • prend uniquement le premier dans types: administrative_area_level_1 et country
0
Victor 17 janv. 2017 à 19:25

2 réponses

Meilleure réponse

J'utilise des symboles à la place:

place.tap do |pl|
  pl[:name] = place_details.dig(:name)
  place_details.dig(:address_components).try(:each) do |component|
    pl[component.dig(:types)[0].to_sym] = component[:long_name]
  end
end
0
Victor 18 janv. 2017 à 14:48
place_details.tap do |place|
  place.try(:[], :address_components).try(:each) do |address|
    place[address.try(:[], :types).try(:first)] = address.try(:[], :long_name)
  end
  place.delete(:address_components)
end
0
Sergey Sokolov 17 janv. 2017 à 18:57