私は、rails_admin、devise、およびcancanで実行されている基本的なRailsアプリを持っています。FancyBox 2を使用して、ユーザーが[クライアントログイン]リンクをクリックしたときにライトボックスタイプのログインモーダルウィンドウを表示しています。ユーザーが間違ったクレデンシャルを入力すると、ユーザー名またはパスワードが間違っていることを示すフラッシュメッセージとともにモーダルウィンドウにそのページを再度表示するのではなく、ユーザーが/ users /sign_inにリダイレクトされることを除いて、希望どおりに動作しています。 。2つの質問があります:
- ユーザーが誤ったクレデンシャルを送信した場合にFancyBox2モーダルウィンドウを引き続き表示し、モーダルウィンドウ内にクレデンシャルを再入力する必要があることを示すフラッシュメッセージを表示するにはどうすればよいですか?
- FancyBox 2モーダルウィンドウにない限り、ユーザーが/ users / sign_inページにアクセスできないようにするにはどうすればよいですか?現在、ユーザーが「www.example.com/users/sign_in」と入力すると、ログインのために全ページに移動します。理想的には、これでFancyBox2モーダルウィンドウをトリガーしたいと思います。
関連するファイルは次のとおりです。
app / views / layouts / appliction.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Test App</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= stylesheet_link_tag "jquery.fancybox.css", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= javascript_include_tag "jquery.fancybox.js" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= flash[:notice] %>
<%= flash[:alert] %>
<%= yield %>
<script>
$(document).ready(function() {
$('.fancybox').fancybox({
'onStart': function() {
$('#fancybox-outer').css({'background':'transparent'});
$('#fancybox-bg-n,#fancybox-bg-ne,#fancybox-bg-e,#fancybox-bg-se,#fancybox-bg-s,#fancybox-bg-sw,#fancybox-bg-w,#fancybox-bg-nw')
.css({'background-image':'none'});
}
})
});
</script>
</body>
</html>
app / views / welcome / index.html.erb(root_path)
<h1>Test App</h1>
<% if user_signed_in? %>
<a href="app">Dashboard</a>
<% else %>
<a class="fancybox fancybox.ajax" href="users/sign_in">Client Login</a>
<% end %>
app / views / devise / sessions / new.html.erb
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>
<div><%= f.submit "Sign in" %></div>
<% end %>
<%= render "devise/shared/links" %>
ルート.rb
TestApp::Application.routes.draw do
get "welcome/index"
resources :containers
resources :scales
devise_for :users
mount RailsAdmin::Engine => '/app', :as => 'rails_admin'
root :to => 'welcome#index'
end