Rails: Как заранее узнать, не удастся ли сохранить? - PullRequest
4 голосов
/ 15 января 2011

Рассмотрим этот код моего контроллера:

def create
  change_some_db_values
  buyer = Buyer.new(params[:buyer])
  if buyer.save
    redirect_to(:action => 'index')
  else
    render('new')
  end
end

Я хотел бы знать заранее, если buyer.save потерпит неудачу или нет. Если это не удастся, я не хочу выполнять change_some_db_values. Как мне этого добиться?

Ответы [ 3 ]

11 голосов
/ 15 января 2011

Вы можете добавить проверку на достоверность перед сохранением :

def create
  buyer = Buyer.new(params[:buyer])
  if buyer.valid?
    change_some_db_values
  end
  if buyer.save
    redirect_to(:action => 'index')
  else
    render('new')
  end
end
7 голосов
/ 15 января 2011

Лучшим способом может быть помещение всех изменений в транзакцию и затем откат в случае сбоя save.

def create
  Buyer.transaction do
    change_some_db_values
    buyer = Buyer.new(params[:buyer])
    buyer.save!
  end
end
1 голос
/ 15 января 2011

Вы можете использовать функцию valid?, чтобы увидеть, является ли объект действительным для операций. Вот пример кода, который реализует этот подход:

def create
  # change_some_db_values
  buyer = Buyer.new(params[:buyer])
  if buyer.valid?
    change_some_db_values
  end
  if buyer.save
    redirect_to(:action => 'index')
  else
    render('new')
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...