Ruby on rails 设计强参数消毒剂

Ruby on rails 设计强参数消毒剂,ruby-on-rails,devise,strong-parameters,Ruby On Rails,Devise,Strong Parameters,我试图在使用Desive时自定义我的输入参数。在这个问题上,我已尽我所能遵循了这一原则。我也在谷歌上搜索了很多有用的文章,比如一篇。最后,当我填写表单并点击提交时,新用户页面上的“注册”表单被返回。当我在控制台中检查数据库时,没有添加新用户,下面列出了服务器日志以及相关代码。如果你想看到任何其他代码,请告诉我,我会更新问题。非常感谢您的任何帮助 服务器日志: Started GET "/users/sign_up utf8=%E2%9C%93&authenticity_token=lnK

我试图在使用Desive时自定义我的输入参数。在这个问题上,我已尽我所能遵循了这一原则。我也在谷歌上搜索了很多有用的文章,比如一篇。最后,当我填写表单并点击提交时,新用户页面上的“注册”表单被返回。当我在控制台中检查数据库时,没有添加新用户,下面列出了服务器日志以及相关代码。如果你想看到任何其他代码,请告诉我,我会更新问题。非常感谢您的任何帮助

服务器日志:

Started GET "/users/sign_up
utf8=%E2%9C%93&authenticity_token=lnKi02OIXc3sSkCpCzKmvQ6iaSZPI6s9aVxN9pCavH8%3D&user%5Bemail%5D=kit%40kit.com&user%5Bhandle%5D=kit&user%5Bpassword%5D=[FILTERED]&user%5Bpassword_confirmation%5D=[FILTERED]&commit=Sign+Up" for 127.0.0.1 at 2013-11-17 21:01:31 -0800
Processing by Devise::RegistrationsController#new as HTML
Parameters: {"utf8"=>"✓",  "authenticity_token"=>"lnKi02OIXc3sSkCpCzKmvQ6iaSZPI6s9aVxN9pCavH8=", "user"=>{"email"=>"kit@kit.com", "handle"=>"kit", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign Up"}
Rendered devise/shared/_links.erb (0.3ms)
Rendered devise/registrations/new.html.erb within layouts/application (3.7ms)
Completed 200 OK in 10ms (Views: 9.0ms | ActiveRecord: 0.0ms)
我的应用程序控制器:

class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
 protect_from_forgery with: :exception


 protected

 def devise_parameter_sanitizer
    if resource_class == User
      User::ParameterSanitizer.new(User, :user, params)
    else
      super # Use the default one
    end
 end
end
new.html.erb(内部视图/设计/注册):

在routes.rb中修改了route的Devices_以指向新控制器

  devise_for :users, :controllers => {:registrations => "registrations"}
最后,我注释掉了对应用程序控制器中designe_参数_sanitarizer的引用,并删除了

    require "#{Rails.application.root}/lib/user_sanitizer.rb"

在sanitizers.rb

中,您可以将其添加到设计注册控制器中

private

def configure_devise_params
  devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit(:email, :password, :password_confirmation)
  end
end

我不确定你是否还需要帮助,但我可以通过删除带前缀的帐户使我的消毒器正常工作

在您的内部,user_sanitizer.rb从您的方法中删除“帐户”

def sign_in
    ...
end  

def sign_up
    ...
end  

这样做对我来说很有效。

我试图在user_sanitizer.rb中做基本相同的事情,要求它通过sanitizers.rb。同样的结果,没有
警告:无法批量分配受保护的属性
我想我遗漏了其他东西。请参阅问题中的编辑(1),了解我是如何实现上述功能的。
      private

        def configure_devise_params
          devise_parameter_sanitizer.for(:sign_up) do |u|
            u.permit(:email, :password, :password_confirmation)
          end
        end
    end 
  devise_for :users, :controllers => {:registrations => "registrations"}
    require "#{Rails.application.root}/lib/user_sanitizer.rb"
private

def configure_devise_params
  devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit(:email, :password, :password_confirmation)
  end
end
def sign_in
    ...
end  

def sign_up
    ...
end