Как мне разрешить все параметры, даже если они пустые?

У меня есть следующее:

def index
  @dealFilter = DealFilter.new params[:deal_filter].permit(deal_filter: {})

Работает, когда заданы параметры, а не когда они отсутствуют. Это дает undefined method ``permit' for nil:NilClass Did you mean? print ошибка. Я хотел бы, чтобы это работало в обоих случаях.

  • Я старался params[:deal_filter] но жаловался ActiveModel::ForbiddenAttributesError,
  • Я старался params.permit(deal_filter: {}) но сказано unknown attribute 'deal_filter' for DealFilter.,
  • Я старался params.permit(:deal_filter) но тогда игнорируются значения параметров: Unpermitted parameters: utf8, deal_filter, commit,

1 ответ

Решение

Если params пуст, нам нужно установить для него значение по умолчанию, используя fetch:

params.fetch(:deal_filter, {}).permit(:some_params)

чтобы params[:deal_filter] будет {} когда это отсутствует.

Из ваших ошибок, окончательный код должен быть:

params.fetch(:deal_filter, {}).permit(:min, :max, :sector_id)

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