ruby-on-rails - 尝试使用 Rails 上的设计注册时,UsersController#create 中的 ArgumentError
问题描述
我是 Rails 的新手,我一直在尝试使用 devise gem 在我的 Rails 应用程序上设置注册。当我创建用户时,会弹出以下错误:
用户控制器中的参数错误#创建的参数太少
但用户仍然成功创建并添加到数据库中。
这是我的 routes.rb 文件:
resources :users
devise_for :users
root to: 'static_pages#home'
get '/signup', to: 'users#new'
users_controller.rb 中的创建函数为:
@user = User.new(user_params)
if @user.save
format.html { redirect_to user_session_url(@user), notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
render 'new'
end
end
到目前为止,我注意到当我将资源行:users 与 devise_for :users 交换时,它不会给我抛出错误,但是在列出所有用户时,它只保存了设计所需的邮件和密码,而不是其他数据用户的姓名,姓氏等。
这是我的 User.rb 文件:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, presence: true, length: {minimum:2, maximum:20}
validates :last_name, presence: true, length: {minimum:2, maximum:20}
end
解决方案
首先,当我们写
devise_for :users
它为您创建预定义的路由,其中包括 sign_up 和 sign_in 路径。如果您想保存额外的参数,请“清理”它们。例如:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :lastname])
end
end
如果您想制作自己的自定义控制器和路由,请跳过预定义的路由,例如:
devise_for :users, :skip => [:sessions, :passwords, :registrations]
并使其在 routes.rb 文件中归您所有:
devise_for :users, :skip => [:sessions, :passwords, :registrations]
namespace :api, defaults: {format: :json} do
devise_for :users, :controllers => {
:sessions => "api/sessions",
:passwords => "api/passwords"
}
end
和 session_controller.rb
def session_params
params.require(:session).permit(:name, :last_name, :all_extra_parameters_defined_here)
end
在 user_controller 中,不需要使用 format.html ,只需重定向它。
推荐阅读
- eclipse - 打开 Eclipse 时出现不支持的内容类型的错误消息
- javascript - 在危险的SetInnerHTML 中传递反应组件
- reactjs - React:props 更改时不会触发 componentWillReceiveProps
- javascript - 无法导航用户。未定义不是对象(评估 this.props.navigation.navigate)
- algorithm - 如何获得离其他点最近的点?
- tensorflow - AttributeError:模块'tensorflow.python.layers.layers'没有属性'Layer'
- mongodb - Azure Cosmos DB:将集合克隆到另一个数据库
- python - 试图优化 n 范围的交集但尚未提出解决方案?
- postgresql - 如果我已经将它们流式传输到备用服务器,是否需要存档 postgres WAL 记录?
- rest - 远程上传秘密到 Thycotic Secret Server 的 API