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

时间:2015-03-27 06:30:16

标签: ruby-on-rails json strong-parameters whitelist

我有这个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

这会在浏览器中抛出错误,表示 - 未定义的方法`permit'对于#ARRAY

这是发送给控制器的JSON -

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

我已经被困在这里很久了。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

请尝试这样

您的JSON应该是这样的

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

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

答案 1 :(得分:0)

因此,将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

请随时改进此答案。它也会对我有所帮助。但就目前而言,对于那些坚持这个问题的人来说,这是最好的工作。