相关疑难解决方法(0)

你如何访问Devise控制器?

设备中的控制器是否自动生成?你如何访问它们?

我知道你的观点 rails generate devise_views.

ruby-on-rails devise

40
推荐指数
4
解决办法
4万
查看次数

如何在覆盖设计注册控制器时编写控制器测试?

我希望覆盖Devise::RegistrationsController实现一些自定义功能.为此,我创建了一个RegistrationsController像这样的新东西:

# /app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  def new
    super
  end
end
Run Code Online (Sandbox Code Playgroud)

并设置我的路线,如下所示:

devise_for :users, :controllers => { :registrations => "registrations" }
Run Code Online (Sandbox Code Playgroud)

并试图像这样测试它:

describe RegistrationsController do
  describe "GET 'new'" do
    it "should be successful" do
      get :new
      response.should be_success
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

 1) RegistrationsController GET 'new' should be successful
 Failure/Error: get :new
 AbstractController::ActionNotFound:
   Could not find devise mapping for path "/users/sign_up".
   Maybe you forgot to wrap your route inside the scope block? For example:

       devise_scope …
Run Code Online (Sandbox Code Playgroud)

routing routes ruby-on-rails devise ruby-on-rails-3

30
推荐指数
1
解决办法
5874
查看次数

覆盖设计after_sign_up_path_for不起作用

在路由中我有根路径指向"home#index"但当我尝试覆盖它时,after_sign_up_path_for在我登录或注册时保持将我重定向到根路径.我试图将它放在设计子类控制器和application_controller中,但它不起作用.我需要做什么?

应用控制器

class ApplicationController < ActionController::Base
  protect_from_forgery

  def after_sign_up_path_for(resource)
    show_cities_path(resource)
  end
end
Run Code Online (Sandbox Code Playgroud)

登记控制员

class RegistrationsController < ApplicationController
  def after_sign_up_path_for(resource)
    show_cities_path(resource)
  end
end
Run Code Online (Sandbox Code Playgroud)

路线

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

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

23
推荐指数
4
解决办法
2万
查看次数

使用Rails 3和Devise管理用户帐户

我在Rails 3应用程序中实现了Devise,我需要管理员用户才能管理用户.用户无法注册,因此管理员必须创建帐户.最好的方法是什么?

UsersController当Devise已经提供时,创建我自己的东西似乎不太干,Devise::RegistrationController但我没有看到任何其他选项.

ruby-on-rails devise

12
推荐指数
1
解决办法
7700
查看次数

如何在设计模型中使用嵌套属性

我有与使用Devise创建其他相关模型(没有答案)相同的问题.

我已经覆盖了创建新用户的设计视图并添加了公司名称,我已将模型更改为使用accepts_nested_attributes_for

没有错误,但它没有添加嵌套记录,我没有可以修改请求的控制器.

我有以下内容(缩短为使其可读):

的routes.rb

map.devise_for :users
map.resources :users, :has_many => :companies
Run Code Online (Sandbox Code Playgroud)

user.rb

has_many :companies
accepts_nested_attributes_for :companies
devise :registerable ... etc
Run Code Online (Sandbox Code Playgroud)

company.rb

belongs_to :user
Run Code Online (Sandbox Code Playgroud)

new.html.erb

...
<% form_for resource_name, resource, :url => registration_path(resource_name) do |f| %>
...
  <% f.fields_for :company do |company_form| %>
    <p><%= company_form.label :name %></p>
    <p><%= company_form.text_field :name %></p>
  <% end %>
...
Run Code Online (Sandbox Code Playgroud)

更新:我没有添加:company到User模型中的attr_accessible列表.

ruby-on-rails devise

10
推荐指数
2
解决办法
1万
查看次数

设计自定义登录表单

有没有办法在我的自定义登录表单中指出Devise身份验证器?标准的,没有样式的表单是不可用的(字段丢失,在提交时抛出异常,实际上已经崩溃了我的运行时.)并且看起来不太好看.我有一个100%可用的表单,一个实际记录人员,但如果出现错误,标准表单会显示,也缺少错误消息.类似"当被要求提交登录表单时,渲染/views/sys/login.html.erb,然后出错,返回该视图并输入错误消息"注意:我已经尝试过以下问题,来自另一个问题

devise_for :users, :path => '', :path_names => {:sign_in => "system/login", :sign_out => "logout", :sign_up => "register" }
Run Code Online (Sandbox Code Playgroud)

这只是覆盖了我的表格

(我/system/的HTTP从/sys/视图目录中获取文件,因此http://localhost:3000/system/login会呈现/views/sys/login.html.erb)

编辑:从未开发过使用登录或身份验证的rails应用程序(仅限标准HTTP身份验证)

ruby forms ruby-on-rails devise

10
推荐指数
1
解决办法
2万
查看次数

无法使用Devise批量分配受保护的属性以创建has_many嵌套模型

我已经看过RailsCast,另一个嵌套属性视频,很多SO帖子,并与此争吵了一段时间,但我仍然无法弄明白.我希望它有点小.

我有两个型号,User(通过制定创建),和Locker(又名,产品心愿),和我试图创建Locker一个User用户注册时.我的登录表单有一个字段,用于表示新的Locker(适当调用的:name)我正在尝试分配给在新用户注册时创建的锁定器.我所遇到的只有:

WARNING: Can't mass-assign protected attributes: locker

我试过的每个组合accepts_nested_attributesattr_accesible在我的两个车型,但仍然没有什么作品.我可以从日志中看到它正在由Devise #create方法处理,我知道Devise不够聪明,无法创建我想要的模型:)

这是我的两个模型的相关部分:

# user.rb    
class User < ActiveRecord::Base
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :locker_attributes

  # Associations
  has_many :lockers
  has_many :lockups, :through => :lockers

  # Model nesting access
  accepts_nested_attributes_for :lockers
end
Run Code Online (Sandbox Code Playgroud)

# locker.rb
class Locker < ActiveRecord::Base
  belongs_to :user
  has_many :lockups
  has_many :products, :through => :lockups 

  attr_accessible :name, :description
end

# lockers_controller.rb (create)
    @locker …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mass-assignment nested-attributes devise ruby-on-rails-3

8
推荐指数
1
解决办法
3007
查看次数

Rails设计:"您需要在继续之前登录或注册"而不是"您将收到一封包含说明的电子邮件......"

我已经设置了Devise on Rails 4.2.0并且一切似乎都在工作,我使用了以下指南:

http://sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/

我的设计模块是:

devise :database_authenticatable, :registerable, :confirmable,
       :recoverable, :rememberable, :trackable, :validatable, :omniauthable
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,如果我尝试通过转到注册页面创建一个新帐户,然后在输入我的电子邮件和新密码(两次)后,我将被带回登录页面并看到"未经验证"的消息:

 You need to sign in or sign up before continuing
Run Code Online (Sandbox Code Playgroud)

相反,我应该得到'send_instructions'消息:

 You will receive an email with instructions for how to confirm your email address in a few minutes.
Run Code Online (Sandbox Code Playgroud)

我的ApplicationController中有一个before_filter:

before_filter :authenticate_user!, :except => [:show]
Run Code Online (Sandbox Code Playgroud)

虽然我承认我不明白为什么这不会在登录页面或"忘记密码"页面上给我验证错误.无论哪种方式,我尝试添加:new_user_session到:除了,但这没有帮助.

当有人注册时,如何获得正确的闪存通知?

我没有覆盖任何设计代码(除了sourcey doc建议的内容),我的DeviseHelper只有一个打印出flash消息的方法:

def devise_error_messages!
    return '' if resource.errors.empty?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    messages.html_safe
end
Run Code Online (Sandbox Code Playgroud)

编辑:

我最初搜索SO没有帮助(太多类似的问题没有相关性),但现在我发现了这个:

在sign_out错误后设计sign_in

所以我认为问题是,在我执行sign_up操作后,Devise正试图将我带到root_path.我不知道为什么会这样做:确认设置,它似乎应该带我回到sign_in页面.

我尝试通过使用以下命令覆盖cutom注册控制器中的'after_sign_up_path_for'来覆盖它:

覆盖设计注册控制器

也许我做错了,但这似乎没有帮助.

所以现在的问题是,在有人做sign_up后,如何让Devise回到sign_in页面,为什么这不是可确认设置的默认操作?

ruby ruby-on-rails confirmation-email email-confirmation devise

6
推荐指数
1
解决办法
8157
查看次数

如何在Devise中自定义控制器以进行注册?

当新用户通过Devise注册时,我需要添加一些简单的方法和操作.

我想申请一个发送电子邮件给我的通知方法.

我想使用acts_as_network传递会话值并将新注册表连接到邀请它们的人.

我如何定制,我查看了文档,但我并不完全清楚我需要做什么....谢谢!

controller ruby-on-rails devise

5
推荐指数
1
解决办法
9303
查看次数

设计:覆盖Recaptcha注册控制器中的创建操作

我正在尝试从Devise中的Registrations Controller覆盖create方法,以包含Recaptcha验证(如此此处所示):

class RegistrationsController < Devise::RegistrationsController

  def create
    if verify_recaptcha
      super
    else
      build_resource
      clean_up_passwords(resource)
      flash[:alert] = "Bad words."
      render_with_scope :new
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

也改变了我的routes.rb:

  map.devise_for :users, :controllers => {:registrations => "registrations"}, :path_names => {
    :sign_up => 'signup',
    :sign_in => 'login',
    :sign_out => 'logout'
  }
Run Code Online (Sandbox Code Playgroud)

当尝试访问新的注册页面(使用新路径名:http:// localhost:3000/users/signup)时,会显示以下错误:

LoadError in RegistrationsController#new

Expected /home/benoror/project/app/controllers/registrations_controller.rb to define RegistrationsController
Run Code Online (Sandbox Code Playgroud)

完全错误的痕迹

任何帮助赞赏.

顺便说一下,我正在使用Devise 1.0.11和Rails 2.3.10,谢谢!

overriding ruby-on-rails recaptcha devise

5
推荐指数
1
解决办法
5276
查看次数