使用 rails 中的强参数将 JSON 参数列入白名单

White listing JSON parameters using Strong Parameters in rails

我有这个 ajax 呼叫发送 JSON -

$.ajax({
        data: JSON_main_data,
        url: '/daily_work_updates',
        type: "POST",

        success: function(data){
            if (data ==true)
            alert("Data saved successfully");

            else
            alert("Data not saved successfully");
        },
        dataType: 'JSON',
        contentType : 'application/json'
      });

当我尝试将其保存到数据库时,需要使用强参数将其列入白名单 rails 4.

这是对StrongParamter函数的调用-

DailyWorkUpdate.new(daily_work_update_params)

强参数法-

private
  def daily_work_update_params 
  params.require(:save_daily).permit(:attr1)
  end

这会在浏览器中抛出一个错误,上面写着- #ARRAY

的未定义方法“允许”

这是发送给控制器的JSON-

{"save_daily"=>[{"attr1"=>"AGNE_WI_UCMS"}]}

我已经卡在这里好久了。任何帮助将不胜感激。

请这样尝试

你的JSON应该是这样的

{"daily_work_update"=>{"attr1"=>"AGNE_WI_UCMS"}}

def daily_work_update_params 
  params.require(:daily_work_update).permit(:attr1)
end

因此,将 JSON 参数列入白名单似乎存在很多问题。据我了解,这是需要向 rails 开发人员报告的事情。 无论如何,我有一个相同的解决方案,无需将参数列入白名单(这是糟糕的编码标准,但我找到的唯一解决方案)。

我的控制器-

     def create
            (0..params[:length].to_i - 1).each do |i|
              @saved = false
              @saved=DailyWorkUpdate.WriteRecordDailyWorkUpdate(params[:save_daily][i])
            end 
    end

所以我直接在我的模型中使用 SQL 查询插入值-

def self.WriteRecordDailyWorkUpdate(save_daily)
    @connection = ActiveRecord::Base.establish_connection
    DailyWorkUpdate.connection.execute("INSERT INTO `daily_work_update`(`DATE`) 
                                                                VALUES ('"+save_daily["DATE"]')

    return true
  end

请随时改进此答案。它也会帮助我。但就目前而言,对于那些被这个问题困扰的人来说,这是最好的解决方法。