我不是为什么,但以下代码停止了工作(我甚至没有注意到它是如何发生的)
的routes.rb
devise_for :users, components: {registrations: 'registrations', sessions: 'sessions'}
registations_controller.rb
class RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:name, :surname, :username, :email, :avatar)
devise_parameter_sanitizer.for(:account_update).push(:name, :surname, :email, :avatar)
end
end
正如我所说,以前每个人都工作得很好,但现在我得到了:
Processing by Devise::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lvuPOmTRqv6XUQ/O1g4Q9VNvzD7DgGCHocY/OlAvKHEIvWAHvlS982hxSZZzzAESCpmL5QTUcTLw/c9ME/sUFQ==", "user"=>{"name"=>"John", "surname"=>"Doe", "username"=>"foobar", "email"=>"foobar@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Register"}
Unpermitted parameters: name, surname, email
Cofiguration:
P.S。:现在我完全理解为什么要用单元测试覆盖我的代码并使用Travis CI
答案 0 :(得分:13)
自4.1以来,for
方法已被弃用。请改用:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
attributes = [:name, :surname,:username, :email, :avatar]
devise_parameter_sanitizer.permit(:sign_up, keys: attributes)
devise_parameter_sanitizer.permit(:account_update, keys: attributes)
end
end
答案 1 :(得分:10)
我认为您应该在应用程序控制器中尝试“configure_permitted_parameters”方法而不是注册控制器。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:name, :surname,:username, :email, :avatar)
devise_parameter_sanitizer.for(:account_update).push(:name, :surname, :email, :avatar)
end
end
答案 2 :(得分:0)
在4.5.0文档中:
如果您想允许其他参数(惰性方法™),您可以 可以使用ApplicationController中的简单before过滤器来做到这一点:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
end
为我工作(使用Rails 5.2.1)。
带有嵌套参数(未经测试):
嵌套属性(例如您使用的是accepts_nested_attributes_for), 那么您将需要告诉设计有关这些嵌套和类型的信息:
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,
address_attributes: [:country, :state, :city, :area, :postal_code]])
end
end
答案 3 :(得分:0)
在使用Devise gem时,我也遇到了这个问题。这是由于我在Rails应用程序中向email_confirmation
模型中添加了users
参数而没有在users_controller
中将该参数列入白名单。
这是我的解决方法:
users_controller
email_confirmation
参数添加到users_params
操作中允许的参数列表中。仅此而已。
我希望这会有所帮助