1

ドキュメントとウィキに従ってクライアント側の検証(3.2.1)とネストされたフォーム(0.3.1)を設定すると、既存のネストされたフィールドの一意性が誤って検証されていることを除いて、すべてがうまく機能しています。それらは新しいレコードとして見られています。ネストされたフォーム内の既存のネストされていないフィールドは、期待どおりに検証されます。検証がない場合、ネストされたすべてのフィールドは完全に保存および更新されます。

これが私のコードです:

_form.html.erb

   <%= nested_form_for(@package, :validate => true) do |f| %>
     <%= render 'common/error_messages', :target => @package %>
     <div class="clearfix">
        <%= f.label :id %>
        <div class="input"><%= f.text_field :id, :readonly => "readonly" %></div>
     </div>
    ....................

     <h3>Events</h3>

    <div class="clearfix">
        <%= f.fields_for :packvents %>
        <%= f.link_to_add image_tag("icons/plus_16.png"), :packvents %> Add Event
    </div>


    <div class="actions">
            <a><%= f.submit "Save package","class" => "btn primary",:id => "submitBtn" %>       </a>&nbsp&nbsp<a><%= link_to 'Cancel', :back,"class" => "btn"  %></a>
    </div>
    <% end %>

_packvent_fields.html.erb

 <div id="event" class="clearfix" >
    <%= f.link_to_remove image_tag("icons/delete_16.png"),:class => "event-delete"%>
  <div class="event_input"><%= f.select :event_id, grouped_options_for_select(Pevent.for_select(current_user), selected_key = f.object.event_id, prompt = nil),{},{:validate => true, :class => 'new_event'} %></div>
 </div>

新しいフィールドを動的に追加することは、ネストされたフォームのwikiコードと組み合わせたクライアント側の検証コールバックを介して正常に機能します。

rails.validations.callbacks.js

window.ClientSideValidations.callbacks.element.fail = function(element, message, callback) {
  callback();
  if (element.data('valid') !== false) {
    $('#submitBtn').prop('disabled', true);
    element.parent().find('.message').hide().show('slide', {direction: "up", easing: "easeOutBounce"}, 500);
  }
}

window.ClientSideValidations.callbacks.element.pass = function(element, callback) {
  // Take note how we're passing the callback to the hide() 
  // method so it is run after the animation is complete.
  element.parent().find('.message').hide('slide', {direction: "up"}, 500, callback);

    $('#submitBtn').prop('disabled', false);

}

application.js

$(document).ready(function() {
$('form').on('nested:fieldAdded', function(event) {
  $(event.target).find(':input').enableClientSideValidations();
})
});

余分なdivやクラスなどをすべて削除する場合と同様に、コールバックを完全に削除しても効果はありません。基本検証に「作成/保存時」条件を追加することはできません。フィールドが動的に追加されるため、機能する必要があります。

packvent.rb

:event_id、:uniqueness => {:scope =>:package_id}を検証します

どんな考えでも大歓迎です。

編集:さらに奇妙なことに、グループ内の最後のフィールドセットは、それが1つだけであっても、正しく検証されます。複数のセットと関係があります...

4

0 に答える 0