我要替换一些违反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
如果逐个允许这些参数不起作用,那么另一种方法来弄清楚我需要允许哪些参数呢?
答案 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])