ruby on rails - undefined method `name' for nil:NilClass for custom slug -


i have restaurant model use geocoder gather city, state, , neighborhood on before_validation callback.

class restaurant < activerecord::base   # attrs: :name, :address, :city_id, :neighborhood_id    ...    before_validation :geocode    geocoded_by :address |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 

in city model i've put custom slug uses city's name , state's name belongs to.

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 

whenever create new restaurant i'm error:

undefined method `name' nil:nilclass  def state_slug   "#{name} #{state.name}" end 

understandably because there isn't city or state has yet persisted database. i'm wondering how can configure callback work?

write method in city model. generate slug when state id got changed.

def should_generate_new_friendly_id?     new_record? || state_id_changed? end 

and make little change following method.

  def state_slug    "#{name} #{state.name}" if state.present?   end 

Comments

Popular posts from this blog

java - Static nested class instance -

c# - Bluetooth LE CanUpdate Characteristic property -

JavaScript - Replace variable from string in all occurrences -