我使用的是devise 4.6.1 & rails 5.2.2
我正在尝试使用configure_permitted_parameters
在application controller
中允许:avatar
,但是,当我尝试通过account_update
表单更新用户时,我得到了错误:
Processing by RegistrationsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"C3zs4PT5Ui5MCVBr6Q9S05TJi2UThwGFQ+s0kTKqb+v4JHeTrl0sfeB5p+owee3DnfJ86BkgPcfNpqgWsdPqcg==", "user"=>{"username"=>"testuser2", "email"=>"testuser2@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00007f4ced47a108 @tempfile=#<Tempfile:/tmp/RackMultipart20190618-18771-b0w9jf.png>, @original_filename="category-icon.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"category-icon.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"Update"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ /home/ec2-user/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ /home/ec2-user/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Unpermitted parameter: :avatar
(0.1ms) begin transaction
↳ /home/ec2-user/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
(0.0ms) commit transaction
↳ /home/ec2-user/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Unpermitted parameter: :avatar
Unpermitted parameter: :avatar
Unpermitted parameter: :avatar
我试着改变
before_action :configure_permitted_parameters, if: :devise_controller?
至
before_action :configure_permitted_parameters
然而,当我这样做时,我得到以下错误:
DiscussionsController:0x00007f4cee0855d8
的未定义局部变量或方法resource_class
application_controller:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update, keys: [:avatar])
end
发布于 2019-06-18 17:44:08
也许可以试试这个:
devise_parameter_sanitizer.for(:account_update).push(:avatar)
我认为这确实是最好的方式:
before_action :configure_permitted_parameters, if: :devise_controller?
发布于 2019-06-19 01:38:32
看起来你没有重定向到正确的控制器。你覆盖控制器了吗?如果不是,那么它应该由Devise::RegistrationsController#update as HTML
处理,但在您的情况下,它是由RegistrationsController#update as HTML
处理的,这可能是原因。
https://stackoverflow.com/questions/56645777
复制相似问题