我想知道处理在表单提交期间保存模型时发生的异常的最佳方法。我目前正在使用这样的代码片段。提交表单时的Rails异常处理
class Mycontroller
def edit
@customer = Customer.new
@permissions = Hash.new
@permissions['save'] = true
@permissions['clear'] = true
@permissions['some_other'] = false
end
def submit_handler
@customer = Customer.find(params[:id])
@customer.update_attributes!(params[:customer])
redirect_to(:controller => 'XXXXXX', :action => 'edit', :id=>params[:id])
rescue ActiveRecord::RecordInvalid => e
render :action => :edit, :id => params[:id]
end
end
,这里是我的看法命名edit.html.erb
<% form_for :customer, :url => {:action =>"submit_handler", :id=>id} do |acc|%>
<%= render :partial => 'fields', :locals => { :acc => acc } %>
<table align="center">
<tr align="center">
<% if @permissions['some_other'] == true %>
<td id='some_other' align="center"><%= submit_tag "Some other" %></td>
<%end%>
<% if @permissions['save'] == true %>
<td id='save'align="center"><%= submit_tag "Save" %></td>
<%end%>
<% if @permissions['clear'] == true %>
<td id='clear' align="center"><%= button_to "Clear", :action => :clear %></td>
<%end%>
</table>
<%end%>
我对上面的代码片断的理解是,渲染方法调用模板之前不会调用动作“编辑”“编辑”。我将“编辑”的操作处理程序中的对象(@permissions)传递给模板“编辑”。事情工作正常时,我做了重定向到编辑操作,但不是在渲染过程中,因为我已经从控制器传递给模板的对象(@权限)在呈现期间不可用。我做对了吗?这是Rails处理异常的方式吗?如果是这样,当我调用render方法时,如何将对象(@permissions)传递给模板?任何指针将不胜感激。
谢谢。
究竟发生了什么错误?如果在'edit'函数和视图(表单)中命名对象'@ customer',则不会收到错误,因为'@ customer'对象也是在'submit_handler'动作中创建的。.. – rubyprince 2011-03-18 17:06:28
@rubyprince :我编辑了代码以使其更清晰。让我知道这是否有助于理解我的问题。谢谢你的努力。 – rajaramyadhav 2011-03-18 17:20:18