Ошибка недопустимого параметра при добавлении параметра запроса при использовании администрирования

Я использую Administrate v0.11.0 с текстовым полем search_term, он работает совершенно нормально, и теперь я хочу добавить параметр запроса my_search_condition_flag который является логическим значением флага, который влияет на условие поиска.

В моем index действие контроллера, я добавил следующую строку, чтобы запросы с этим параметром передавали Strong Parameters Проверка.

params.permit(:search, :my_search_condition_flag)

Остальная часть кода в index действие просто копируется из ApplicationController.rb Администрации.

Когда я делаю HTTP-запрос с параметром запроса my_search_condition_flag=1 мой 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

которая возникает из метода рендеринга текстового поля search_term внутри index.html.erb

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

Я уже попробовал следующее в своем классе Dashboard, представленном здесь:

 # -- 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 вместо? (чего я не хочу)

0 ответов

Вы были на правильном пути. Исключение возникает в/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?;-)

Другие вопросы по тегам