【问题标题】:White listing JSON parameters using Strong Parameters in rails使用 Rails 中的强参数将 JSON 参数列入白名单
【发布时间】:2015-05-31 10:07:33
【问题描述】:

我有这个发送 JSON 的 ajax 调用 -

$.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 的未定义方法“permit”

这是发送到控制器的 JSON-

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

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

【问题讨论】:

  • 试试这个params[:save_daily][0].permit(:attr1)

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


【解决方案1】:

请这样尝试

你的 JSON 应该是这样的

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

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

【讨论】:

  • 这是缺少响应参数或值为空:daily_work_update。我的 JSON 的名称是 - JSON_main_data 。我试过了。它也不起作用。
  • @AlexJose 你试过上面的代码还是遇到同样的问题?
  • 我试过你回复的代码。它无法识别值 - :daily_work_update 。因此它说 - 参数丢失或为空
  • @AlexJose,你能在这里粘贴一行错误吗?我想看到你的这个错误完整的“未定义的方法`permit' for #”
  • 我的 JSON 是一个包含哈希的数组。因此,它无法“允许”问题中提到的我的强参数函数中的值。我应该在发送之前以某种方式解析我的 JSON 吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多