【问题标题】:Add extra params to user from devise in ruby on rails [duplicate]从 ruby​​ on rails 的设计中向用户添加额外的参数 [重复]
【发布时间】:2016-03-30 08:57:16
【问题描述】:

我想在用户模型中添加一个属性名称。我运行了迁移命令以将列添加到数据库中并且有效。将属性添加到用户本身也可以,但它没有保存在数据库中。

如何将属性“名称”添加到 RegistrationController 的 sign_upaccount_update 的必需参数中?

这是我的用户模型

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  attr_accessor :name
end

我尝试在RegistrationController 中将所需的参数添加到这样的方法中

class Users::RegistrationsController < Devise::RegistrationsController

  def sign_up_params
    params.require(:user).permit(:name,:email, :password, :password_confirmation)
  end

  def account_update_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :current_password)
  end
end

在路由中我添加了一行

devise_for :users, controllers: { registrations: 'users/registrations' }

但是用户名仍然没有保存在数据库中。

【问题讨论】:

  • 是脚手架还是手动创建的?
  • 这个设计来自脚手架

标签: ruby-on-rails ruby devise


【解决方案1】:

将此添加到您的 ApplicationController 以配置 signup signinaccount_update 参数。

def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name,:email, :password, :password_confirmation) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:name, :username, :anonymous, :email, :password, :password_confirmation,:reset_password_token) }
end

并且还将before_filter 添加到ApplicationController 中,例如:

before_filter :configure_permitted_parameters, if: :devise_controller?

【讨论】:

  • 似乎只有在我删除了我在我的用户模型中添加的属性后才有效。但它确实有效!
【解决方案2】:

请查看Devise Parameter Sanitization

你可以试试这个:

class Users::RegistrationsController < Devise::RegistrationsController

 def sign_up_params
  devise_parameter_sanitizer.for(:sign_up).push(:name)
 end

 def account_update_params
   devise_parameter_sanitizer.for(:account_update).push(:name, :email, :password, :password_confirmation, :current_password)
 end
end

【讨论】:

  • 我收到此错误No sanitizer provided for user
  • 在这个答案中尝试将for 的参数从:user 更改为:sign_up:account_update
  • @sajan 感谢您指出这一点。我已经编辑了答案。
猜你喜欢
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 2013-11-30
  • 2010-12-16
  • 2016-04-24
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多