Rails:如何提前知道"保存"是否会失败?

Mis*_*hko 4 ruby-on-rails ruby-on-rails-3

考虑我的控制器的这个代码:

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

我想提前知道是否buyer.save会失败.如果它会失败我不想执行change_some_db_values.我怎么能实现这个目标?

Ski*_*ick 11

您可以在保存之前添加有效性检查:

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
Run Code Online (Sandbox Code Playgroud)


tro*_*skn 7

更好的方法可能是将所有更改放入事务中,然后在save失败时回滚.

def create
  Buyer.transaction do
    change_some_db_values
    buyer = Buyer.new(params[:buyer])
    buyer.save!
  end
end
Run Code Online (Sandbox Code Playgroud)