0
私は別のスクリーンの上に開くモーダルを持っています。基本画面には、AJAXを使用してそのページの結果をフィルタリングするフィルタメソッドがあります。Rails:モーダルアクション/サブミット後にページを更新しない
私は画面上の結果をフィルタリングした後、モーダルを開き、モーダルのフォームに対してアクションを実行できます。しかし、私はリダイレクト/リフレッシュを実行したくありません。
提出を実行しているときにこれを行うにはどうすればよいですか?
私のモーダルリンクのようである:
<%= link_to this_path(user_id: user.id), class:"modal-link", data: {"modal-url" => this_path(user_id: user.id)} do %><span><i class="fa fa-plus"></i><% end %>
モーダルは十分に標準です:
<div class="modal form-modal">
<div class="modal-container">
<div class="modal-dialog modal-dialog-wide">
<button class="close">×</button>
<div class="modal-content">
<div class="modal-header">
<h2 class="hdg-b">Edit This</h2>
</div>
<div class="modal-body">
<div id="error_explanation"></div>
<%= render 'form', form_path: action_path, form_method: :put, create: false %>
</div>
</div>
</div>
</div>
</div>
AJAXがあまりにもある:
MyProject.onPageLoad(function() {
var form = $('.edit_site_scope'),
onSubmit = function(event) { //callback handler for form submit
event.preventDefault();
var form = $(this),
url = form.attr("action"), //get form action:
type = form.attr("method"),
data = form.serialize();
var location = window.location.href;
var posting = $.ajax({
type: type,
url: url,
data: data,
dayaType: "json",
success:function(data, textStatus, jqXHR)
{
$('.modal').remove();
window.location = location;
$('#contact-tab-submit').show();
},
error: function(jqXHR, textStatus, errorThrown)
{
$('#error_explanation').html('');
errors = jqXHR.responseJSON;
$.each(errors, function(key, value) {
$('#error_explanation').append('<div class="alert alert-dismissable" id="alert-message"><i class="fa fa-exclamation-triangle"></i>' + value + '<div class="alert-close">Close</div></div>');
});
$('#contact-tab-submit').show();
}
});
window.setTimeout(function() {
$(".alert").fadeTo(500, 0).slideUp(500, function(){
$(this).remove();
});
}, 5000);
return false; // prevent default when submit button clicked
};
if (form.size() !== 0) {
form.submit(onSubmit);
}
});
そしてここでは、上の私のコントローラのアクションでありますフォーム提出:
def action_to_be_performed
@this_thing = ThisThing.where(id: params[:id]).first
@this_thing.update(this_things_params)
flash[:success] = "Successfully performed the action."
render json: @this_thing
rescue => error
Rails.logger.error "Exception caught updating this.\nCause: #{error}\n" + error.backtrace.join("\n")
render json: @this_thing.errors.full_messages, status: :bad_request
end
私はまだモーダルで苦労しています。私はAJAXで推測します。アクションを実行し、モーダルを閉じて、現在のページを開いたままにするにはどうすればよいですか?