ユーザーが送信し、ユーザーがサインインしていない場合、ログインするためのモーダルプロンプトを受け取るフォームがあります。ユーザーがログインすると、モーダルは消えますが、フォームの送信ボタンを再度クリックする必要があります。サインインに成功した後、モーダルが消えてフォームが自動的に送信されるとよいでしょう。
そのため、内部sessions/create.js.erb
に次を追加しました。
# create.js.erb
<% if signed_in? %>
$('#ajax-modal').modal('hide').empty();
$('#new_response).submit();
<% else %>
$('#ajax-modal').html('<%= j render("sessions/form") %>').modal();
<% end %>
これは機能しますが、スケーラブルではありません。#new_response
まず第一に、私は似たような振る舞いを必要とする他のフォームを持っているかもしれません - だけではありません. そのため、新しいフォームを追加するたびに、編集create.js.erb
して追加する必要がありif (form exists) submit();
ます。サインインにモーダルが使用されているが、フォームがまったく含まれていない場合もあります。
sessions/create.js.erb
フォームが存在する場合にのみフォームを送信するように指示するフックを添付する方法はありますが、フォーム ID の知識はありませんか? 基本的に、それは合格しています。
# responses/_form.html.slim
= form_for [@discussion, @response], remote: true do |f|
= f.label :content, "Comments"
= f.text_area :content, rows: 8
= f.submit "Reply", class: 'btn btn-success reply', 'data-disable-with' => "Reply"
# Responses controller
class ResponsesController < ApplicationController
before_filter :require_authentication, except: :index
...
def require_authentication
redirect_to signin_path unless signed_in?
end
end