【问题标题】:Rails: Strong Params Not Working, Forbidden AttributesRails:强参数不起作用,禁止属性
【发布时间】:2018-09-26 19:12:52
【问题描述】:

我正在替换一些违反 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

如果逐个允许这些参数不起作用,那么另一种方法是如何确定我需要允许的参数是什么?

【问题讨论】:

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


    【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多