Rails 4验证嵌套创建



我有一个嵌套形式:

= 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"

这将显示此消息,而不是抛出任何错误。

最新更新