模型上的after_created Rails回调方法是否具有新创建的模型的实例?

时间:2010-11-02 03:20:10

标签: ruby-on-rails callback

我的Contact模型有一个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 个答案:

答案 0 :(得分:4)

是的,发生这种情况是因为在将值分配给公司对象时没有使用self。

在ruby中,通常您不需要使用“self”来检索实例的属性

例如在您的代码中。你可以 puts company ,它会正常工作。

但是在分配时(在左侧)你总是要使用自己。

所以在你的代码中更改它。

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

 
  self.company.phone = phone 
  company.save