Когда я пытаюсь AJAX посты с неверными параметрами.Я не получаю ошибки проверки после сбоя отправки.
Я попытался добавить идентификатор в div, а затем заполнить его списком сообщений об ошибках, используя JS.Сбой отправки с ошибкой nilClass & отката в консоли.Я пытаюсь понять, почему он пытается создать сообщение, даже если AJAX вызывает его полный сбой.
post_js_error_validation.js
$(document).ajaxError(function (event, xhr, options, exc) {
let errors = JSON.parse(xhr.responseText);
let er = "<ul>";
for(let i = 0; i < errors.length; i++){
let list = errors[i];
er += "<li>" + list + "</li>"
}
er += "</ul>";
$("#error_explanation").html(er);
});
post_form.html.erb
<%= form_for(@post, remote: true, :html => {multipart: true}) do |f| %>
<div class="form-group">
<% if @post.errors.any? %>
<ul>
<% @post.errors.full_messages.each do |error| %>
<li><%= error %></li>
<% end %>
</ul>
<% end %>
<div id="error_explanation">
</div>
</div>
<div class="form-group">
<label>Post Title
<small><span class="badge badge-danger">Required</span></small>
</label>
<%= f.text_field :post_title, class: 'form-control first_input', label: false %>
</div>
<div class="form-group">
<div class="fileinput fileinput-new" data-provides="fileinput">
<span class="bttn-simple bttn-md bttn-primary btn-file"><span class="fileinput-new">Select Video</span><span class="fileinput-exists">Change Video</span><%= f.file_field :post_video, class: 'form-control', accept: 'video/*', label: false %></span>
<span class="fileinput-filename"></span>
<a href="#" class="close fileinput-exists" data-dismiss="fileinput" style="float: none">×</a>
</div>
</div>
<div class="form-group">
<label>Message
<small><span class="badge badge-danger">Required</span></small>
</label>
<%= f.text_area :post_body, class: 'form-control emojiarea', label: false %>
</div>
<div class="form-group">
<label class="checkbox-container">Private Post <%= f.check_box :post_private, label: false %><span class="checkmark"></span></label>
</div>
<div class="form-group">
<label class="checkbox-container">Show Location <%= f.check_box :show_post_location, label: false %><span class="checkmark"></span></label>
</div>
<div class="form-group">
<%= f.submit @post.new_record? ? "Create Post" : "Change Post", data: {disable_with: "Creating Post...Please wait" }, class: 'bttn-material-flat bttn-md bttn-royal bttn-block' %>
</div>
<% end %>
posts_controller.rb
def create
@post = current_user.posts.build(story_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Your post was created!' }
format.json { render :show, status: :created, location: @post }
format.js
else
format.html { render :new }
format.json { render json: @story.errors, status: :unprocessable_entity }
format.js
end
end
end
create.js.erb
$('#dialog').modal('toggle');
$('#posts').append('<%= j render(@post) %>');
$('#dialog').modal('hide');
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();