首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缺少签署模板

缺少签署模板
EN

Stack Overflow用户
提问于 2014-01-26 04:29:26
回答 2查看 551关注 0票数 0

最后,经过大约两个小时的混乱,我发现了我的7个错误中的大部分。这就是说,我有一个新的,我不知道如何摆脱它。我似乎也有同样的问题,我问了一个类似的问题,那是在我开始我最近的git承诺之前。不用说,我现在一点也不好笑。不管怎么说,失败在这里:

代码语言:javascript
运行
复制
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)>'

实际上,我不知道什么代码是必要的,所以我会发布我所有的会话内容和给我带来麻烦的规范。

认证规范

代码语言:javascript
运行
复制
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

会话助手

代码语言:javascript
运行
复制
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

会话控制器

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<% 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代码。我之所以包括它,是因为它有相关的链接。

代码语言:javascript
运行
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2014-01-26 04:41:45

您需要销毁函数中的会话,如果不想删除任何注销屏幕,则需要销毁redirect_to root_path

大多数人在注销后重定向。

票数 0
EN

Stack Overflow用户

发布于 2015-09-11 05:58:21

您必须在SessionsController,而不是SessionsHelper.中实现销毁方法。只需将此方法( SessionsHelper“销毁”)从移动到SessionsController.应该是这样的:

sessions_controller.rb

代码语言:javascript
运行
复制
class SessionsController < ApplicationController
 ...
  def destroy
    sign_out
    redirect_to root_url
  end
end

sessions_helper.rb

代码语言:javascript
运行
复制
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
  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21359702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档