我有一个应用程序,允许用户在注册/登录后查看博客文章"并将id
保存在session[:user_id]
中。
我遇到的问题是" link_to"一旦它们进入就退出的方法。在浏览器中,当我将鼠标悬停在" Logout"链接,它甚至没有表明它是一个链接,点击它什么都不做。
index.hmtl.erb:controller =>博客
<div ng-controller="BlogController">
<div class="container-fluid">
<div class="row text-center">
<div class="col-xs-12 col-sm-12">
<h4 class="user_session_signedInAs_txt">
Signed in as:
<span class="user_session_email"><%= session[:email]%></span>
</h4>
<h4>
<%= link_to('Logout', {:controller => "users", :action => 'logout'}, :method => :delete, class: "blog_home_logout" ) %>
</h4>
<h4 class="search_blogs_heading">Search Blogs</h4>
</div>
<div class="col-sm-2"></div>
<div class="col-sm-8">
<h6 class="search_blogs_label">Enter "title" or "date"</h6>
<input type="text" class="search_blogs_input" ng-model="search_blogs" placeholder=" Title or Date" autofocus>
</div>
</div>
<div class="row">
<div class="col-sm-2"></div>
<div class="col-xs-12 col-sm-8">
<div class="blog_search_div" ng-repeat="blog in blogs | filter: search_blogs | xFutureDates | limitTo: 15" ng-show="search_blogs">
<br>
<br>
<a href="/blog_page?date={{blog.date}}">
<p class="blog_search_date">{{blog.date}}</p>
<p class="blog_search_title">{{blog.title}}</p>
</a>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<img class="spa_room_image" src="/assets/SpaTreatmentRoom.jpg">
</div>
</div>
<div class="container-fluid">
<div class="row text-center">
<h4 class="recent_blogs_heading">Recent Blogs</h4>
</div>
<div class="row">
<div class="col-xs-12">
<div ng-repeat="blog in blogs | recentMonths | limitTo:10">
<a href="/blog_page?date={{blog.date}}">
<p class="blog_recentBlogs_date">{{blog.date}}</p>
<p class="blog_recentBlogs_title">{{blog.title}}</p>
<p class="blog_recentBlogs_description">{{blog.description.trunc(140)}}Read More</p>
</a>
</div>
</div>
</div>
</div>
<div class="container-fluid blogs_index">
<div class="row text-center">
<h4 class="blog_index_heading">Recent Blogs</h4>
</div>
<div class="row text-center">
<div class="col-xs-12">
<div ng-repeat="blog in blogs | recentMonths | limitTo:10">
<a href="/blog_page?date={{blog.date}}">
<h6 class="archives_index_blog_title">{{blog.title}}</h6>
</a>
</div>
</div>
</div>
<div class="row text-center">
<h4 class="blog_index_heading">Categories</h4>
</div>
<div class="row text-center">
<div class="col-xs-12 col-sm-12">
<div class="blog_category_div">
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Body Contouring'">Body Contouring</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Breast Reduction Liposuction'">Breast Reduction Liposuction</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Breast Reduction Surgery'">Breast Reduction Surgery</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Cosmetic Surgery'">Cosmetic Surgery</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Cosmetic Surgery Procedures'">Cosmetic Surgery Procedures</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Facelift'">Facelift</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Fat Grafting'">Fat Grafting</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Gynecomastia'">Gynecomastia</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Infographics'">Infographics</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Laser Lift'">Laser Lift</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Laser Liposuction'">Laser Liposuction</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Liposuction'">Liposuction</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Liposuction Surgery'">Male Breast Reduction</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Neck Liposuction'">Neck Liposuction</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Non-Invasive Procedures'">Non-Invasive Procedures</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Plastic Surgeons'">Plastic Surgeons</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Plastic Surgery'">Plastic Surgery</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='SmartLipo'">SmartLipo</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='SmartLipo Triplex'">SmartLipo Triplex</a></h6>
<h6 class="blog_category_links"><a href="/blog_category_archive?category='Weight Loss'">Weight Loss</a></h6>
</div>
</div>
</div>
</div>
<div class="container-fluid blog_index">
<div class="row text-center">
<h4 class="blog_index_heading">Archives</h4>
</div>
<div class="row text-center">
<div class="col-xs-12">
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='October 2015'">October 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='September 2015'">September 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='August 2015'">August 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='July 2015'">July 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='June 2015'">June 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='May 2015'">May 2015</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='October 2014'">October 2014</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='September 2014'">September 2014</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='August 2014'">August 2014</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='July 2014'">July 2014</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='June 2014'">June 2014</a></h6>
<h6 class="blog_months_links"><a href="/blog_month_archive?month_year='May 2014'">May 2014</a></h6>
</div>
</div>
</div>
</div>
</div>
Controller users_controller.rb
class UsersController < ApplicationController
...
def logout
session[:user_id] = nil
session[:email] = nil
flash[:notice] = "Logged out."
redirect_to(:action => "login" )
end
private
def message_params
return params.require(:user).permit( :email, :password, :password_confirmation )
end
end
路线
Rails.application.routes.draw do
...
# Users login/signup
get '/blog_signup' => 'users#new'
post 'blog_signup' => 'users#create'
get '/blog_login' => 'users#login'
post 'blog_attempt_login' => 'users#attempt_login'
get '/user/blog_logout' => 'users#logout'
# User_Admins login/signup
get '/admin_login' => 'user_admins#login'
post 'admin_attempt_login' => 'user_admins#attempt_login'
get '/admin_logout' => 'user_admins#logout'
end
通过DOM查看源视图&#34; link_to&#34;
<a class="blog_home_logout" rel="nofollow" data-method="delete" href="/user/blog_logout">Logout</a>
我已更改路线以匹配a
标记
答案 0 :(得分:1)
这可能不是原因,但这是你需要解决的问题:
有些浏览器和某些代理做了预取&#34;他们称所有&#34;正常&#34;页面上的链接并缓存结果,以便他们在您点击它们时更快地做出响应。他们可能会调用注销链接!因此,您的注销链接不应使用GET方法。
您需要将注销链接从GET更改为不同的(POST或更好的DELETE),当然还有相应的路径。
<%= link_to('Logout', {:controller => "users", :action => 'logout'}, :method => :delete) %>
该链接位于div
内,且ng-controller
属性。如果您的网页上有一个角度应用,那么它将使用javascript更改链接。
注销和注销通常在SessionsController中完成,而不是在UsersController中完成,因为您没有对用户模型执行某些操作。 (但这更像是一种风格问题。)