Ruby on rails 无法在Desive-RubyonRails上添加新字段

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

我只是按照文档在概要文件中添加了新字段,但它似乎不起作用。当我得到不允许的参数时:firstname,lastname,password\u confirmation

这是我的用户模型:

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