我有一个嵌套形式:
= form_for @class4, url: {action: "create"} do |f|
= render 'shared/error_messages'
.form-group
= f.label :description
= f.text_field :description
= f.fields_for :class3 do |builder|
= render :partial => '/shared/class3', :locals => {:f => builder}
= submit_tag( "submit")
= link_to 'clear'
带有错误的部分
<% if @instance.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(instance.errors.count, "error") %>.
</div>
<ul>
<% instance.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
在我的控制器中有以下代码:
current_user
.class1.find( params [:"id"])
.class2.where( id: params [:"id2"])
.first_or_create!
.class3.where(id: params[:"id3"])
.first_or_create!
.class4.create!(params[:"...."])
问题是,当params[:"id"]不是有效的Class1记录id时,我得到了一个ActiveRecord::RecordNotFound错误,这是显而易见的,但是,我想向用户显示该错误,就像任何其他表单验证错误一样,例如:
params["ID"]不是有效的Class1记录
如何在通知用户他们选择的ID无效的同时保留嵌套创建?
添加一个救援块,如下所示:
.class1.find( params [:"id"]) rescue "params["ID"] is not a valid Class1 record"
这将显示此消息,而不是抛出任何错误。