最后,经过大约两个小时的混乱,我发现了我的7个错误中的大部分。这就是说,我有一个新的,我不知道如何摆脱它。我似乎也有同样的问题,我问了一个类似的问题,那是在我开始我最近的git承诺之前。不用说,我现在一点也不好笑。不管怎么说,失败在这里:
1) Authentication signin with valid information followed by signout
Failure/Error: before { click_link "Sign out" }
ActionView::MissingTemplate:
Missing template sessions/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
* "/Users/Brawain/rails_projects/sample_app/app/views"
# ./spec/requests/authentication_pages_spec.rb:45:in `block (5 levels) in <top (required)>'实际上,我不知道什么代码是必要的,所以我会发布我所有的会话内容和给我带来麻烦的规范。
认证规范
require 'spec_helper'
describe "Authentication" do
subject { page }
describe "signin page" do
before { visit signin_path }
it { should have_content('Sign in') }
it { should have_title('Sign in') }
end
describe "signin" do
before { visit signin_path }
describe "with invalid information" do
before { click_button "Sign in" }
it { should have_title('Sign in') }
it { should have_selector('div.alert.alert-error') }
describe "after visiting another page" do
before { click_link "Home" }
it { should_not have_selector('div.alert.alert-error') }
end
end
describe "with valid information" do
let(:user) { FactoryGirl.create(:user) }
before do
visit '/signin'
fill_in "Email", with: user.email.upcase
fill_in "Password", with: user.password
click_button "Sign in"
end
it { should have_title(user.first) }
it { should have_link('Profile', href: user_path(user)) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
describe "followed by signout" do
before { click_link "Sign out" }
it { should have_link('Sign in') }
end
end
end
end会话助手
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def destroy
sign_out
redirect_to root_url
end
def sign_out
current_user.update_attribute(:remember_token,
User.encrypt(User.new_remember_token))
cookies.delete(:remember_token)
self.current_user = nil
end
end会话控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
end
end届会/new.html.erb
<% provide(:title, "Sign in") %>
<h1>Sign in</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(:session, url: sessions_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Sign in", class: "btn btn-large btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>这不是整个页面,但这是我身体的html代码。我之所以包括它,是因为它有相关的链接。
<div id="announcements">
TESTER TIME!
<% if signed_in? %>
<li><%= link_to "Users", '#' %></li>
<li id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Account <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", current_user %></li>
<li><%= link_to "Settings", '#' %></li>
<li class="divider"></li>
<li><%= link_to "Sign out", signout_path, method: "delete" %></li>
</ul>
</li>
<% else %>
<li><%= link_to "Sign in", signin_path %></li>
<% end %>
</div>发布于 2014-01-26 04:41:45
您需要销毁函数中的会话,如果不想删除任何注销屏幕,则需要销毁redirect_to root_path
大多数人在注销后重定向。
发布于 2015-09-11 05:58:21
您必须在SessionsController,而不是SessionsHelper.中实现销毁方法。只需将此方法( SessionsHelper“销毁”)从移动到SessionsController.应该是这样的:
sessions_controller.rb
class SessionsController < ApplicationController
...
def destroy
sign_out
redirect_to root_url
end
endsessions_helper.rb
module SessionsHelper
...
def sign_out
current_user.update_attribute(:remember_token,
User.encrypt(User.new_remember_token))
cookies.delete(:remember_token)
self.current_user = nil
endhttps://stackoverflow.com/questions/21359702
复制相似问题