Что мешает этому наблюдателю before_save работать должным образом? - PullRequest
0 голосов
/ 12 января 2012

Я создал Observer для класса User (ниже).Я знаю, что вызывается метод before_save, и я знаю, что вводится условие new_record, однако новая запись никогда не сохраняется ... Не хватает ли чего-то фундаментального для обратного вызова before_save?

Сохранение вКонтроллер выглядит так (количество ошибок, выдаваемых путами, равно нулю):

def create
    @user = User.new(params[:user])
    if @user.save
      #UserMailer.registration_confirmation(@user).deliver
      redirect_to root_url, :notice=>"Signed Up!"
    else
      puts @user.errors.count
      render "new"
    end
  end

class UserObserver < ActiveRecord::Observer
  observe :user

  def before_save(user)
    if user.new_record?
      puts 'HELLLLLLLLLLP'
      #todo make a confirmation code generator
      user.confirmationcode='1234'
      user.confirmed=false
    else
      if user.email_changed?
        user.confirmationcode='123'
        user.confirmed=false
      end
    end
  end

  def after_save(user)
    if user.confirmed=false
      UserMailer.confirm_registration(user).deliver
    end
  end

end

1 Ответ

1 голос
/ 14 января 2012

В Ruby результат последней строки метода или блока используется в качестве возвращаемого значения, и ловушка before_save может отменить действие save, возвращая false. Если вы посмотрите, последняя строка вашей ветки if user.new_record? вернет false. Убедитесь, что ваш before_save возвращает что-то, что оценивается как true, и вы будете в порядке.

...