我使用了rubise 2.0.0p0和Rails 4.0.0.beta1的rails 4.0分支。
这是一个问题,我正在检查我是否以正确的方式进行,或者我还有其他事情要做。我确信很多人转向Rails 4.0都面临着同样的问题(谷歌搜索类似的东西后)。
我已阅读以下链接:
现在使用devise我创建了一个User模型,我使用上面的gists创建了以下控制器(并确保将它包含在我的routes文件中)。我的额外参数是first_name和last_name。
class Users::RegistrationsController < Devise::RegistrationsController
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
private :sign_up_params
private :account_update_params
end
还有什么我应该做的吗?这是从现在开始做事的最佳方式(因为放弃了attr_accessor)。我的表单似乎工作正常(新的和更新)。 gists说使用“resource_params”,但在我的服务器日志中总是给出“未经许可的参数”错误。
答案 0 :(得分:66)
感谢Devise的Rails4分支的最新更新,它并不需要插入'resource_params'。
我创建了一个全新的Rails4应用程序,并遵循基本的Devise安装步骤,我的应用程序正常运行,所以我认为,你做得很好。
但是如果需要,还有一个修改后的要点,根据允许的参数为您提供一些额外的细节:
来源:https://gist.github.com/bluemont/e304e65e7e15d77d3cb9
# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
protected
# my custom fields are :name, :heard_how
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:name, :heard_how,
:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:name,
:email, :password, :password_confirmation, :current_password)
end
end
end
答案 1 :(得分:26)
对于Rails 5,设计4使用此:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation])
end
end
答案 2 :(得分:7)
在config/initializers
中添加一个模块,所有parameters
就像这样
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_filter :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end
end
DeviseController.send :include, DevisePermittedParameters