我使用的是Rails 5.2,是最新版本的devise 4.6.1。由于某些原因,在应用程序控制器中将参数列入白名单无效。这段代码直接从文档中获取,我不知道为什么它不起作用。
Application_controller:
class ApplicationController < ActionController::Base
# protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :channel_variable
def channel_variable
@channels = Channel.all.order('created_at desc')
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update, keys: [:avatar])
devise_parameter_sanitizer.permit(:sign_in, keys: [:avatar])
devise_parameter_sanitizer.permit(:sign_up, keys: [:avatar])
end
end
控制台:
Unpermitted parameter: :avatar
edit.html.erb:
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= f.error_notification %>
<div class="field">
<div class="control">
<%= f.label :avatar %>
<%= f.file_field :avatar %>
</div>
</div>
<% end %>
答案 0 :(得分:0)
我发现最好创建一个单独的路由,并UsersController
修改身份验证之外的User
属性,包括Active Storage
附件。您想创建一个users#update
方法,并在其中将avatar
参数列入白名单。这有点陈旧,但是可以接受的答案基本上就是您要采用的方法: