And*_*kin 5 ruby error-handling ruby-on-rails design-guidelines ruby-on-rails-3
对不起,如果问题很明显,我只是开始使用Rails.
我现在在几个控制器方法中有以下代码:
respond_to do |format|
if @project.save
format.html { redirect_to(edit_project_url(@project), :notice => '#{user.name} added to #{role}.') }
format.js
else
format.html { render :action => "edit" }
format.js #...
end
end
Run Code Online (Sandbox Code Playgroud)
所以问题是,在所有方法中对错误做同样事情的最佳方法是什么?
是否建议我使用save!并处理它rescue_action?
或者我应该采用自己的respond方法并传递save一个块?
tad*_*man 16
在块中稍后使用保存和救援的异常提升变体通常比这样分支更方便.例外的好处是它们会破坏交易.
def create
@project.save!
respond_to do |format|
format.html { redirect_to(edit_project_url(@project), :notice => '#{user.name} added to #{role}.') }
format.js
end
rescue ActiveRecord::RecordInvalid
respond_to do |format|
format.html { render :action => "edit" }
format.js #...
end
end
Run Code Online (Sandbox Code Playgroud)
if当你试图一次保存多个对象时,你会发现从一堆嵌套语句中解决问题变得非常棘手,但是一个简单rescue的异常将会巧妙地处理它.
def create
Project.transaction do
@project.save!
@something_else.save!
@other_stuff.save!
end
# ...
rescue ActiveRecord::RecordInvalid
# ...
end
Run Code Online (Sandbox Code Playgroud)
如果其中任何一个保存爆炸,你将获得例外.为了确保所有这些都显示验证错误,您可能必须调用.valid?它们来填充它们,否则您将在未经测试失败后获得这些错误.
| 归档时间: |
|
| 查看次数: |
5349 次 |
| 最近记录: |