Как мне создать обратный вызов, который запускается после окончательного сохранения в методе create в Rails? - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть следующий метод создания для контроллера контактов:

def create

    puts "in create method"
    @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
      #check if need to update company with contact info
      @contact.update_company

      flash[:notice] = "Successfully created contact."
      redirect_to @contact
    else
      render :action => 'new'
    end
  end

Обратный вызов, который я хочу запустить, должен быть выполнен после строки if @contact.save в самом конце метода ... но сейчас он запускает его в первом .create.

Как разрешить обратный вызов только после завершения обработки в методе создания?

1 Ответ

1 голос
/ 03 ноября 2010

По сути, ActiveRecord :: Callback create (...) - Создает объект (или несколько объектов) и сохраняет его в базе данных, если проверки пройдены. Полученный объект возвращается независимо от того, был ли объект успешно сохранен в базе данных или нет.

Вместо этого вам нужно использовать (это происходит из логики вашего скрипта):

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

Если вы хотите сохранить функцию обратного вызова, используйте функцию обратного вызова after_save.

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