使用管理时添加请求参数时出现不允许的参数错误



我正在使用带有search_term文本框的管理员 v0.11.0,它工作完全正常,现在我想添加一个请求参数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

这是从索引.html.erb内search_term文本框的呈现方法中提出的

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

我已经在我的仪表板类中尝试了以下内容,如下所示:

 # -- 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?(我不想要(

你走在正确的轨道上。异常起源于 /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

有了这个,你应该清除错误。

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

相关内容

  • 没有找到相关文章

最新更新