Ruby on rails 具有Rails和Desive的强参数

Ruby on rails 具有Rails和Desive的强参数,ruby-on-rails,devise,strong-parameters,Ruby On Rails,Devise,Strong Parameters,我正在使用Desive的rails 4.0分支以及ruby 2.0.0p0和rails 4.0.0.beta1 这是一个问题,我在检查我是否以正确的方式做了它,或者是否有其他我应该做的事情。我相信很多迁移到Rails 4.0的人都面临着同样的问题(在谷歌搜索类似的东西之后) 我已经阅读了以下链接: 现在使用Deviate我创建了一个用户模型,我使用上述GIST创建了以下控制器(并确保将其包含在我的routes文件中)。我的额外参数是first_name和last_name class

我正在使用Desive的rails 4.0分支以及ruby 2.0.0p0和rails 4.0.0.beta1

这是一个问题,我在检查我是否以正确的方式做了它,或者是否有其他我应该做的事情。我相信很多迁移到Rails 4.0的人都面临着同样的问题(在谷歌搜索类似的东西之后)

我已经阅读了以下链接:

现在使用Deviate我创建了一个用户模型,我使用上述GIST创建了以下控制器(并确保将其包含在我的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
类用户::注册控制器<设计::注册控制器
def注册参数
参数require(:user).permit(:名字,:姓氏,:电子邮件,:密码,:密码确认)
结束
def帐户更新参数
参数require(:user).permit(:名字,:姓氏,:电子邮件,:密码,:密码确认,:当前密码)
结束
私人:注册参数
私有:帐户\更新\参数
结束

还有什么我应该做的吗?这是从现在开始做事情的最好方式吗(自从删除attr_访问器之后)。我的表单似乎运行良好(新的和更新的)。GIST说使用“资源参数”,但这总是会在我的服务器日志中出现“未经许可的参数”错误。

感谢Desive Rails4分支的最新更新,它实际上不需要插入“资源参数”

我已经创建了一个全新的Rails4应用程序,并遵循了基本的设计安装步骤,我的应用程序运行正常,所以我认为,您做得很好

但有一个修改后的要点,如果您需要,它会在允许的参数方面为您提供一些额外的细节:

资料来源:

#控制器/用户/注册_controller.rb
类用户::注册控制器<设计::注册控制器
前\u过滤器:配置\u允许的\u参数
受保护的
#我的自定义字段是:name、:hard\u how
def配置\u允许的\u参数
为(:注册)设计参数消毒剂|
u、 许可证(:姓名,:听说如何,
:电子邮件,:密码,:密码(确认)
结束
为(:帐户更新)设计参数消毒剂|
u、 许可证(:姓名,
:电子邮件,:密码,:密码\u确认,:当前密码)
结束
结束
结束

config/initializers
中添加一个包含所有
参数的模块,效果非常好,如下所示

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
对于导轨5,设计4使用以下方法:

class ApplicationController

非常感谢!救了我,谢谢,也帮了我。这应该是公认的答案。我尝试过这种方法,但对我无效。在控制器端是否需要做一些事情来包含模块,或者它是自动的?这正是我所需要的。谢谢。
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
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