【问题标题】:Unpermitted parameter error when adding request parameter while using Administrate使用管理时添加请求参数时出现不允许的参数错误
【发布时间】:2019-06-15 05:11:23
【问题描述】:

我正在使用 Administrate v0.11.0 和 search_term 文本框, 它工作得很好, 现在我想添加一个请求参数my_search_condition_flag,它是一个影响搜索条件的布尔标志值。

在我的index 控制器操作中, 我添加了以下行,以便带有此参数的请求通过Strong Parameters 验证。

params.permit(:search, :my_search_condition_flag)

index 操作中的其余代码只是从 Administrate 的ApplicationController.rb 复制而来。

当我使用请求参数 my_search_condition_flag=1 发出 HTTP 请求时, 我的index 操作处理得很好, 但 HTTP 响应返回以下错误:

ActionController::UnpermittedParameters in Admin::MyPage#index
Showing /usr/local/bundle/gems/administrate-0.11.0/app/views/administrate/application/_search.html.erb where line #19 raised:

found unpermitted parameter: :my_search_condition_flag

由 index.html.erb 中的 search_term 文本框的渲染方法引发

  <% if show_search_bar %>
    <%= render(
      "search",
      search_term: search_term,
      resource_name: display_resource_name(page.resource_name)
    ) %>
  <% end %>

我已经在我的仪表板类中尝试了以下内容,介绍了here

 # -- Overwrite the method to add one more to the permit list
 def permitted_attributes
   super + [:my_search_condition_flag]  # -- Adding our now removed field to thepermitted list
 end

如何让管理员允许我要添加的参数?

我必须改用请求body 吗? (我不想要)

【问题讨论】:

    标签: ruby-on-rails rails-administrate administrate


    【解决方案1】:

    你在正确的轨道上。正如您所提到的,异常源自/app/views/administrate/application/_search.html.erb:19。如果你看那里,你会看到它使用方法clear_search_params,它也使用 strong_parameters 来允许/拒绝查询参数。您可以使用自己的助手覆盖它。例如:

    module Admin
      module ApplicationHelper
        def clear_search_params
          params.except(:search, :page, :my_required_condition_flag).permit(
            :per_page, resource_name => %i[order direction]
          )
        end
      end
    end
    

    如果您这样做,您将收到一个新的相关错误。这次来自/app/helpers/administrate/application_helper.rb:48。那里的方法称为sanitized_order_params,并且可以类似地覆盖:

    module Admin
      module ApplicationHelper
        # ...
    
        def sanitized_order_params(page, current_field_name)
          collection_names = page.item_includes + [current_field_name]
          association_params = collection_names.map do |assoc_name|
            { assoc_name => %i[order direction page per_page] }
          end
          params.permit(:search, :my_required_condition_flag, :id, :page, :per_page, association_params)
        end
      end
    end
    

    这样,您应该可以清除错误。

    诚然,这不是很好的解决方法。理想情况下,Administrate 应该提供一些更好的方法来覆盖这个允许的搜索参数列表。想提交 PR? ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多