имеет ли метод обратного вызова Rails after_created на модели экземпляр только что созданной модели? - PullRequest
1 голос
/ 02 ноября 2010

У меня есть метод after_create для моей модели контактов.

Однако, когда я ставлю значение, оно выходит ноль. Как получить обратный вызов для вновь созданной модели (я делаю значительные преобразования в модели создания), на который есть ссылка в методе обратного вызова?

after_save   :update_company 

 def update_company   

   puts self.inspect
   puts self.company

   if company.phone.empty? 

      company.phone = self.phone
      company.save

   end       

 end

Когда я просматриваю журналы для self.inspect, он не показывает каких-либо преобразований, используемых в методе create ... все же, это должно выполняться только после того, как он создал (и сохранил) объект, правильно

Вот метод создания:

  def create

    @contact = Contact.create(params[:contact])

     unless @contact.vcard.path.blank?

           paperclip_vcard = File.new(@contact.vcard.path) 

       @vcard = Vpim::Vcard.decode(paperclip_vcard).first
       @contact.title = @vcard.title
       @contact.email = @vcard.email
       @contact.first_name = @vcard.name.given
       @contact.last_name = @vcard.name.family
       @contact.phone = @vcard.telephone
       @contact.address.street1 = @vcard.address.street
       @contact.address.city = @vcard.address.locality
       @contact.address.state = @vcard.address.region
       @contact.address.zip = @vcard.address.postalcode
       @contact.company_name = @vcard.org.fetch(0)

    end

    @contact.user_id = current_user.id # makes sure every new user is assigned an ID    
    if @contact.save
      flash[:notice] = "Successfully created contact."
      redirect_to @contact
    else
      render :action => 'new'
    end
  end

1 Ответ

4 голосов
/ 02 ноября 2010

Да, это происходит из-за того, что вы не использовали self при присвоении значения объекту компании.

В ruby, как правило, вы не требуете использования «self» для получения атрибутов экземпляра

например в вашем коде.Вы можете puts company , и это будет работать нормально.

, но при назначении (с левой стороны) вы всегда должны использовать self.

, поэтому измените это в своем коде.

  self.company.phone = self.phone
  company.save

или

  self.company.phone = phone 
  company.save
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...