【发布时间】:2019-07-03 21:37:27
【问题描述】:
我只希望拥有特定电子邮件地址的人能够注册。我正在使用设计,这是我的内部控制器/管理员/registrations_controller.rb
class Admins::RegistrationsController < Devise::RegistrationsController
def create
if params[:admin][:email] == Rails.application.credentials.development[:admin_email]
super
end
end
我正在尝试在我的测试中发送电子邮件、密码和确认密码。
require 'rails_helper'
RSpec.describe Admins::RegistrationsController do
it 'does not allow xxx@gmail.com with very-secret password to register' do
@request.env["devise.mapping"]=Devise.mappings[:admin]
patch :create, admin: {email: 'xxx@gmail.com", password: "very-secret", password-confirmations: "very-secret"}
end
end
我收到一个参数错误:未知关键字:管理员。如何为 Devise 编写正确的补丁请求?
编辑: 我的路线.rb
Rails.application.routes.draw do
devise_for :admins, controllers: {sessions: 'admins/sessions',
registrations: 'admins/registrations'}
....
我的耙子路线
admin_registration PATCH /admins(.:format)
admins/registrations#update
PUT /admins(.:format)
admins/registrations#update
DELETE /admins(.:format)
admins/registrations#destroy
POST /admins(.:format)
admins/registrations#create
更多信息: 这是使用浏览器打印出来的,它确实在浏览器中工作:
Started POST "/admins" for ::1 at 2019-7-03 21:08:58 -0500
Processing by Admins::RegistrationsController#create as HTML
Parameters: {"utf8"=>"_", "authenticity_token"=>"xxx", "admin"=>{"email"=>"abc@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
inside registrations_controller.rb CREATE
【问题讨论】:
-
由于您正在测试创建,因此您需要
put而不是patch。另外,你能试试put '/admin/{your-devise-model-name-plural}', admin: ..... -
抱歉 - 删除了我的最后一条评论,在错误的文件夹中运行。
-
感谢您写信@Mosaaleb!我输入了 put '/admin/admins', admin: {email: "abc@gmail.com", password: "secret", password_confirmation: "secret"} 我有一个参数错误未知关键字:admin。
-
你能添加你的路由文件吗?
-
是因为
patch :create, admin: {email: 'xxx@gmail.com", password: "very-secret", password-confirmations: "very-secret"}吗?admin这里只是发送参数的关键
标签: ruby-on-rails testing devise