Ruby on rails 无法在Desive-RubyonRails上添加新字段
我只是按照文档在概要文件中添加了新字段,但它似乎不起作用。当我得到不允许的参数时:firstname,lastname,password\u confirmation 这是我的用户模型:Ruby on rails 无法在Desive-RubyonRails上添加新字段,ruby-on-rails,devise,Ruby On Rails,Devise,我只是按照文档在概要文件中添加了新字段,但它似乎不起作用。当我得到不允许的参数时:firstname,lastname,password\u confirmation 这是我的用户模型: class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, rememberable, :trackable, :validatable has_many :is
class User < ApplicationRecord
devise :database_authenticatable, :registerable, :recoverable, rememberable, :trackable, :validatable
has_many :issues
has_many :comments
has_many :likes
# Validations
validates :email, presence: true
validates :password, presence: true
# Omniauth
devise :omniauthable, omniauth_providers: [:facebook]
# Omniauth Facebook # Omniauth Facebook
def self.from_facebook(auth)
where(facebook_id: auth.uid).first_or_create do |user|
# user.image = auth.info.image
user.email = auth.info.email
user.firstname = auth.info.first_name
user.lastname = auth.info.last_name
user.country = auth.info.location
user.region = ""
user.password = Devise.friendly_token[0, 20]
# user.skip_confirmation!
end
end
## Paperclip avatar
has_attached_file :avatar, styles: {
big: "1200x1200>",
medium: "300x300>",
thumb: "100x100>"
}, default_url: "missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
这是我的应用程序控制器,其中包含新设备字段的配置:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
# Devise parameters configuration
before_action :configure_devise_parameters, if: :devise_controller?
def configure_devise_parameters
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:email, :avatar, :firstname, :lastname, :region, :country, :bio, :password, :password_confirmation, :current_password) }
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:email, :avatar, :firstname, :lastname, :region, :country, :bio, :password, :password_confirmation, :current_password) }
end
end
我在用户模型上添加了两个新字段first_name和last_name。然后,我通过创建一个registrations\u controller.rb覆盖了Deviate的RegistrationsController,如下所示
class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :email,
:password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :email,
:password, :password_confirmation, :current_password)
end
这对我有用 创建一个用户目录
mkdir app/controllers/users
创建名为registrations\u controller.rb的控制器
在user.rb中
所以,我尝试在application controller上删除我的方法,并用我的字段替换您的字段,当然,不删除它。它不再工作了…所以您删除了上面所述的configure\u design\u parameters方法和define registrations\u controller.rb。。。正当你能告诉我错误吗?以及添加迁移的新字段?当然,错误保持不变:未允许的参数:firstname、lastname、password\u确认以及添加迁移的新字段都正常,请验证您是否使用了:firstname、:lastname not:first\u name、,:registrations\u controller.rb文件中的last\u name符号,然后使用服务器重新启动并再次检查。请告诉我结果。对不起,我忘了告诉你。请在routes.rb文件中更新您的设计路由,如designe_for:users,:controllers=>{registrations:'registrations}我在回答中更新了它。我刚刚尝试过,它仍然不起作用,我得到相同的错误:未经许可的参数:firstname,lastname,password_确认
mkdir app/controllers/users
# app/controller/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
before_action :configure_account_update_params, only: [:update]
protected
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname, :lastname, :email, :avatar, :password, :password_confirmation])
end
def configure_account_update_params
devise_parameter_sanitizer.permit(:account_update, keys: [:firstname,:lastname,:email, :avatar, :password, :password_confirmation])
end
end
# app/controller/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: "users/registrations" }
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.firstname = auth.info.first_name
user.lastname = auth.info.last_name
user.email = auth.info.email
user.avatar = process_url(auth.info.image + '?type=large')
user.password = Devise.friendly_token[0,20]
end
end
def self.process_url(uri)
avatar_url = URI.parse(uri)
avatar_url.scheme = 'https'
avatar_url.to_s
end