Я хочу знать, каков наилучший способ обработки исключения, возникающего при сохранении модели во время отправки формы. В настоящее время я использую такой фрагмент кода.
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%>
Насколько я понимаю, приведенный выше фрагмент кода заключается в том, что метод render не вызывает действие "edit" перед вызовом шаблона "edit". Я передаю объект (@permissions) из обработчика действия «edit» в шаблон «edit». Все работает нормально, когда я выполняю перенаправление на действие редактирования, но не во время рендеринга, поскольку объект (@permissions), который я передал из контроллера в шаблон, недоступен во время рендеринга. Я все делаю правильно? Это способ Rails для обработки исключений? Если так, как я могу передать объект (@permissions) в шаблон, когда я вызываю метод render? Любые указатели будут с благодарностью.
Спасибо.