Rails: не работают сильные параметры, запрещенные атрибуты - PullRequest
0 голосов
/ 26 сентября 2018

Я заменяю некоторые params.permit! методы, которые являются нарушением гема Brakeman.

Вот метод, который я вставляю в традиционный метод обновления.Метод выглядит следующим образом.

Это работает!

  def update_all_burdens
    params.permit!
    @time_period_hour.update(params[:time_period_hour])
    @time_period_cost.update(params[:time_period_cost])
    @burden_response.update(params[:burden_response])
    @burden_hour.update(params[:burden_hour])
    @burden_cost.update(params[:burden_cost])
  end

Это не работает, выдает ошибку запрещенных атрибутов.Однако я хотел бы разрешить эти параметры безопасно.

  def update_all_burdens
    params.permit(:time_period_hour, :time_period_cost, :burden_response, :burden_hour, :burden_cost)
    @time_period_hour.update(params[:time_period_hour])
    @time_period_cost.update(params[:time_period_cost])
    @burden_response.update(params[:burden_response])
    @burden_hour.update(params[:burden_hour])
    @burden_cost.update(params[:burden_cost])
  end

Если разрешение этих параметров одно за другим не работает, как еще можно выяснить, какие параметры мне нужно разрешить?

1 Ответ

0 голосов
/ 26 сентября 2018

Проблема в том, что params.permit! изменяет внутреннее состояние params, тогда как params.permit(attr, ...) возвращает новый экземпляр ActionController::Parameters, который включает только данные фильтры и наборыразрешенный атрибут для объекта в true.Так что вы должны делать что-то вроде этого:

permitted = params.permit(:time_period_hour, :time_period_cost, :burden_response, :burden_hour, :burden_cost)
@time_period_hour.update(permitted[:time_period_hour])
@time_period_cost.update(permitted[:time_period_cost])
@burden_response.update(permitted[:burden_response])
@burden_hour.update(permitted[:burden_hour])
@burden_cost.update(permitted[:burden_cost])
...