J'ai un modèle Restaurant
qui utilise Geocoder pour regrouper la ville, l'état et le voisinage sur un rappel before_validation
.méthode indéfinie `nom 'pour nil: NilClass pour slug personnalisé
class Restaurant < ActiveRecord::Base
# attrs: :name, :address, :city_id, :neighborhood_id
...
before_validation :geocode
geocoded_by :address do |obj,results|
if geo = results.first
obj.city = City.where(name: geo.city).first_or_create
obj.city.update_attributes(state: State.where(name: geo.state).first_or_create)
obj.neighborhood = Neighborhood.where(name: geo.neighborhood).first_or_create
obj.neighborhood.update_attributes(city: City.where(name: geo.city).first_or_create)
obj.longitude = geo.longitude
obj.latitude = geo.latitude
end
end
end
Dans mon modèle City
je l'ai mis en place une limace personnalisée qui utilise le nom de la ville et le nom de l'Etat qu'il appartient.
class City < ActiveRecord::Base
# attrs :name, state_id
belongs_to :state
friendly_id :state_slug, use: :slugged
def state_slug
"#{name} #{state.name}"
end
end
Chaque fois que je créer un nouveau restaurant, je suis l'erreur:
undefined method `name' for nil:NilClass
def state_slug
"#{name} #{state.name}"
end
parce qu'il n'y a Naturellement pas une ville ou un État qui n'a pas encore persisté à la base de données. Je me demande comment puis-je configurer mon rappel pour que cela fonctionne?
Avez tu essayes? '" # {nom} # {ville.try (: nom)} "'? Il s'assurera que ça n'échoue pas quand 'ville' est' néant ' –
Ouais mais le problème est que j'ai besoin du nom de la ville. Faire ce que vous avez décrit me donnera '/ houston' au lieu de'/houston-texas'. J'ai besoin de la dernière des deux. –
Vous avez besoin du nom de l'état, pas de la ville –