标签: devise

Rspec和Devise:找不到#<User的有效映射

使用RSpec和Devise,我收到映射错误.

  1) BusinessesController GET index sets @new_vacation
     Failure/Error: sign_in @user
     RuntimeError:
       Could not find a valid mapping for #<User id: 8009, email: "persons3@cycle7.com", encrypted_password: "$2a$10$joN9Vy6spNAe4uh7W9fcOOdoeSJ5dr/nBwpmlqcv6EYe...", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2011-04-01 17:05:03", updated_at: "2011-04-01 17:05:03", business_id: 7214, confirmation_token: nil, confirmed_at: "2011-08-24 21:23:51", confirmation_sent_at: nil, failed_attempts: 0, unlock_token: nil, locked_at: nil, admin: true, password_salt: nil>
     # ./spec/controllers/businesses_controller_spec.rb:10:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

看起来答案可能就在这里用设计进行RSpec测试:无法找到有效的映射,但我无法得到它.

任何想法,我真的很难过!谢谢.


的routes.rb

  constraints(SubdomainRoute) …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails devise ruby-on-rails-3

0
推荐指数
1
解决办法
5308
查看次数

Ruby on Rails设计http://0.0.0.0:3000/users/sign_out获取路由错误

routes.rb =>

Sendemail::Application.routes.draw do
    devise_for :users

    get "user/index"

    get "home/index"

    root :to => 'home#index'
end
Run Code Online (Sandbox Code Playgroud)

rake routes =>

        new_user_session GET    /users/sign_in(.:format)          {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)          {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)         {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)         {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)     {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)    {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)         {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)           {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                  {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)          {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)             {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                  {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                  {:action=>"destroy", :controller=>"devise/registrations"} …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise ruby-on-rails-3.1

0
推荐指数
1
解决办法
643
查看次数

臭名昭着的AbstractController :: ActionNotFound - Devise + Rails

所以我已经阅读了如何解决这个问题:

使用AbstractController :: ActionNotFound,自定义设计会话控制器的RSpec测试失败

和

http://lostincode.net/blog/testing-devise-controllers

但是我在哪个文件下添加这些更改是我的问题:

在我的rspec文件夹下

registrations_controller

我试过这个

before :each do
  request.env['devise.mapping'] = Devise.mappings[:user]
end

require 'spec_helper'

describe RegistrationsController do

  describe "GET 'edit'" do
    it "should be successful" do
      get 'edit'
      response.should be_success
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

哪个不起作用,任何帮助改变特定文件使这项工作将不胜感激.

编辑

所以我也尝试过 -

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

所以我创建了一个带有spec/support的文件夹,并创建了一个名为controllers_macros.rb的文件

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      sign_in Factory.create(:admin) # Using factory girl as an example
    end
  end

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      user = Factory.create(:user)
      user.confirm! # or set …
Run Code Online (Sandbox Code Playgroud)

controller rspec ruby-on-rails devise

0
推荐指数
1
解决办法
1890
查看次数

设计与非设计模型混合的链接/路线

我是第一次在应用程序中使用Devise,我遇到了一个我无法理解的奇怪问题:

我用Devise创建了我的用户模型,并设置了所有注册,用户注册等,一切正常.在我的应用程序标题中,我有我的导航菜单(当前为空)和部分登录,注销等:

_header.html.erb

<div class='topbar'>
    <div class='container'>
        <%= link_to 'My app', root_path, :class => 'brand' %>
        <div class='nav'>
        </div>
        <%= render 'layouts/user_options' %>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

_user_options.html.erb

<ul class='user-options'>
    <% if user_signed_in? %>
      <li><%= link_to "Signed in as #{current_user.username}", '#' %></li>
      <li><%= link_to "Sign out", destroy_user_session_path, :method => :delete %></li>
    <% else %>
      <li><%= link_to "Sign up", new_user_registration_path %></li>
      <li><%= link_to "Sign in", new_user_session_path %></li>
    <% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)

现在我添加导航菜单的第一个链接,如果我使用:

<%= link_to 'Tasks', '/tasks/index'  %>
Run Code Online (Sandbox Code Playgroud)

一切都好.但如果我使用:

<%= link_to 'Tasks', :controller => …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise

0
推荐指数
1
解决办法
1070
查看次数

输入一些错误的密码后,设计超时一段时间x?

如果您输入密码错误10次,是否可以让设计超时10分钟?超时我的意思是不可能在X期间输入新密码并收到一条消息,说明您必须等待.

ruby-on-rails devise ruby-on-rails-3

0
推荐指数
1
解决办法
193
查看次数

devise + omniauth设计帮助器,如current_user,user_signed_in?不工作

我使用omniauth使用设计并使用Facebook创建登录,但是有丢失设计帮助方法访问的问题,如current_user和user_signed_in?方法不起作用.

编辑

AuthenticationController

def create
    omniauth = request.env["omniauth.auth"]    
    user = User.find_by_provider_and_uid(omniauth["provider"], omniauth["uid"]) ||       User.create_with_omniauth(omniauth)    
    session[:user_id] = user.id    
    redirect_to dashboard_path(user.id), :notice => "Signed in!"    
end  
Run Code Online (Sandbox Code Playgroud)

redirect_to USercontroller仪表板方法

UserController的

before_filter  :logged_in

 def dashboard    
    @user = User.find(params[:id])   
    @comment = Comment.new    
    @comments = @user.comments.all.paginate(:page => params[:page], :per_page => 5)    
 end 
Run Code Online (Sandbox Code Playgroud)

所以这里控制应该在检查ApplicationController中的logged_in方法后转到dashboard方法

ApplicationController中的logged_in方法

应用控制器

def logged_in    
    if user_signed_in?     
       return true    
    else    
       redirect_to root_path    
       flash[:message] = "please login"    
    end     
  end 
Run Code Online (Sandbox Code Playgroud)

当我使用Facebook在控制台生成的代码后登录时

Started GET "/users/52/dashboard" for 127.0.0.1 at Thu Mar 29 12:51:55 +0530 2012     
Processing by UsersController#dashboard …
Run Code Online (Sandbox Code Playgroud)

devise omniauth ruby-on-rails-3

0
推荐指数
1
解决办法
2669
查看次数

Rails:在哪里定义facebook app id,以便设计初始化程序和控制器可用.

我正在尝试设置fb应用程序ID(由omniauth使用),以便其全局设计初始化程序和控制器.

更多信息

我需要它在设计初始化(config/initializer/devise.rb),以便我可以设置config.omniauth:facebook,fb_app_id,fb_app_secret

试图解决方案

我尝试将此信息添加到yml文件(http://railscasts.com/episodes/85-yaml-configuration-file)中,但是,看起来像是为控制器设置了yml哈希,但我无法将其用于设计初始化.

/home/ubuntu/myapp/config/initializers/devise.rb:215:in `block in <top (required)>': uninitialized constant APP_CONFIG (NameError)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

yaml ruby-on-rails global-variables devise omniauth

0
推荐指数
1
解决办法
2091
查看次数

在Rails中使用Devise 3.2.3 - 无法注销

我正在使用devise 2.1.0 for rails app 3.2.3.这是我做的:

Add gem 'devise' to Gemfile and run bundle
Run rails g devise:install
Run rails g devise User
Setup db by running rake db:migrate
Run Code Online (Sandbox Code Playgroud)

application.html.erb是这样的:

<%if user_signed_in? %>
    Welcome <%= current_user.email%>
    <%= link_to "Sign out", destroy_user_session_path%>
<% else %>
    <%= link_to "Sign up", new_user_registration_path %> or
    <%= link_to "Sign in", new_user_session_path %> 
<% end %>
Run Code Online (Sandbox Code Playgroud)

登录和注册工作正常,但当我单击退出时,我收到一条错误消息:

路由错误

没有路由匹配[GET]"/ users/sign_out"尝试运行rake路由以获取有关可用路由的更多信息.

这是rake路线的输出:

new_user_session GET    /users/sign_in(.:format)                          devise/sessions#new
            user_session POST   /users/sign_in(.:format)                          devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                         devise/sessions#destroy
           user_password POST   /users/password(.:format) …
Run Code Online (Sandbox Code Playgroud)

authentication rake ruby-on-rails devise

0
推荐指数
1
解决办法
624
查看次数

设计显示用户页面

如何创建允许用户查看其个人资料的页面.

有人在周围工作/看/知道这个问题的答案吗?我将不胜感激.

ruby-on-rails devise ruby-on-rails-3

0
推荐指数
1
解决办法
1010
查看次数

设计身份验证:注销并重定向

有没有办法编写Rails方法,它会注销并重定向到自定义页面?我正在使用Devise身份验证gem.

我不希望所有注销都将遵循此重定向,但仅限于调用此方法的位置.

redirect ruby-on-rails logout devise

0
推荐指数
1
解决办法
4768
查看次数