では、Twitter のブートストラップ モーダルを使用して、devise サインイン フォームを表示したいと思います。
ここの wiki 記事のコードをベースにしています: https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app
アプリケーション レイアウト ファイルに以下のマークアップがあります
<div class="modal fade" id="loginModal">
<div class="modal-header">
<button class="close" data-dismiss="modal">×</button>
<h3>Sign In</h3>
</div>
<div class="modal-body">
<%= simple_form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => 'form-horizontal'}) do |f| %>
<div class="inputs">
<%= f.input :email, :required => false, :autofocus => true %>
<%= f.input :password, :required => false %>
<%= f.input :remember_me, :as => :boolean if devise_mapping.rememberable? %>
</div>
</div>
<div class="modal-footer">
<%= f.button :submit, "Sign in", :class => 'btn btn-primary', :data => { :dismiss => "modal"} %>
<% end %>
</div>
</div>
そして、wikiのアドバイスに従い、アプリケーションのヘルパーファイルに以下を追加
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
ただし、機能しません。モーダルは閉じられ、何も起こりません。ページはどこにも移動せず、何もしません。実際のサインイン ページに移動すると機能しますが、モーダルを送信すると機能しません。提案?