【发布时间】:2011-03-18 16:53:55
【问题描述】:
我想知道在表单提交期间保存模型时发生的异常处理的最佳方法是什么。我目前正在使用这样的代码 sn-p。
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%>
我对上面代码sn-p的理解是render方法在调用模板'edit'之前不会调用动作'edit'。我将一个对象(@permissions)从“编辑”的操作处理程序传递给模板“编辑”。当我重定向到编辑操作而不是在渲染期间,事情工作正常,因为我从控制器传递到模板的对象(@permissions)在渲染期间不可用。我做的事情对吗?这是 Rails 处理异常的方式吗?如果是这样,当我调用渲染方法时,如何将对象(@permissions)传递给模板?任何指针将不胜感激。
谢谢。
【问题讨论】:
-
到底发生了什么错误?如果您在
edit函数和视图(表单)中命名对象@customer,则不会出现错误,因为@customer对象也是在submit_handler操作中创建的.. -
@rubyprince:我已经编辑了代码以使其更清晰。让我知道这是否有助于理解我的问题。感谢您的努力。
标签: ruby-on-rails exception-handling render