Rails:强参数不起作用,禁止使用的属性

时间:2018-09-26 19:12:53

标签: ruby-on-rails strong-parameters actioncontroller

我要替换一些违反Brakeman gem的params.permit!方法。

这是我插入传统更新方法中的方法。该方法如下所示。

这行得通!

  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 :(得分:1)

问题是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])