我是Rails的新手,我一直试图使用devise gem在我的Rails应用程序中设置注册。当我创建用户时,会弹出以下错误:
UsersController#create中的ArgumentError 争论太少
但是仍然成功创建了用户并将其添加到数据库中。
这是我的route.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
到目前为止,我注意到当我用devise_for:users交换资源:users时,并不会抛出错误,但是在列出所有用户时,它仅保存了devise所需的邮件和密码,而没有保存用户的其他数据,例如姓名,姓氏等。
这是我的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
答案 0 :(得分:0)
您的user_params应该包含:
def user_params
params.require(:user).permit(:name, :email, :last_name,
:admin, :password,
:remember_me)
end
您没有显示该部分。
答案 1 :(得分:0)
首先,当我们写
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,只需将其重定向。