validates_acceptance_of все еще сохраняет запись - PullRequest
1 голос
/ 09 августа 2011

Я использую ruby ​​1.9.2-p180, рельсы 3.0.7. Я использовал validates_acceptance_of, так как пользователь должен согласиться с нашими условиями. У нас нет для этого столбца, но я понимаю, что «Если столбец базы данных не существует, атрибут term_of_service является полностью виртуальным». http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000082

Во всяком случае, я дважды проверил это, проверяя приложение вручную, и я вижу из журналов, что запись все еще вставляется в БД, что странно, потому что при отправке формы я перенаправлен обратно в форму с ошибкой : «Должен согласиться с условиями» (что заставило меня думать, что это работало раньше)

Я что-то здесь не так делаю?

_form.haml:

%label.checkbox-label{:for => "operator_terms_and_conditions"}
  = f.check_box :terms_and_conditions
  I agree to 
  = link_to "Terms and Conditions", operator_terms_path, :target => "_blank"

operators_controller:

def create
  user_params = params[:operator][:user]
  user_params.merge!(:login => user_params[:email])
  @password = params[:operator][:user][:password]

  Operator.transaction do # don't save User if operator is invalid
    @operator = Operator.create(params[:operator])
  end

  respond_to do |format|
    unless @operator.new_record?
      UserMailer.operator_confirmation_email(@operator, @password).deliver
      UserMailer.operator_registration_admin_notification_email(@operator).deliver

      UserSession.create(@operator.user)
      format.html {redirect_to new_operator_aircraft_path}
    else
      format.html { render :action => "new" }
    end
  end

end

и в модели:

validates_acceptance_of :terms_and_conditions

1 Ответ

0 голосов
/ 09 августа 2011

Нашел ответ.Проблема была не в validates_acceptance_of, а в том, как я сохранял данные.Когда был создан оператор, был также создан пользователь, который был привязан к нему, и именно этот пользователь вставлялся в базу данных.

Это происходит потому, что, хотя оператор был откатан (потому что он не был '(допустимо), пользователь все еще был создан (потому что он не был в транзакции).

Я решил это с помощью nested_transactions:

модель оператора:

...
User.transaction(:requires_new => true) do
  create_user
  raise ActiveRecord::Rollback unless self.valid?
end
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...