如何通过设计允许新参数进行主动存储?

时间:2019-03-05 06:07:08

标签: ruby-on-rails devise

我使用的是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 %>

1 个答案:

答案 0 :(得分:0)

我发现最好创建一个单独的路由,并UsersController修改身份验证之外的User属性,包括Active Storage附件。您想创建一个users#update方法,并在其中将avatar参数列入白名单。这有点陈旧,但是可以接受的答案基本上就是您要采用的方法:

Rails: Devise: How can I edit user information?