代码之家  ›  专栏  ›  技术社区  ›  anquegi

具有json数组的强参数

  •  1
  • anquegi  · 技术社区  · 8 年前

    我已经准备好读这个答案了 how to permit an array with strong parameters

    如何提取注释参数?

    (byebug) params
    {"comments"=>"[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]", "format"=>:json, "controller"=>"airis/observations", "action"=>"create", "id"=>"13534543543"}
    (byebug) params.permit(:id)
    [2017-07-20 19:14:43 +0200] [f2b3d7c8-c84a-43a5-b48f-0f634be49dc7] Unpermitted parameters: comments, format
    {"id"=>"13534543543"}
    (byebug) params.permit(:comments)
    [2017-07-20 19:14:43 +0200] [f2b3d7c8-c84a-43a5-b48f-0f634be49dc7] Unpermitted parameters: format, id
    {"comments"=>"[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]"}
    (byebug) params.permit(comments: [:comment, :date])
    [2017-07-20 19:14:43 +0200] [f2b3d7c8-c84a-43a5-b48f-0f634be49dc7] Unpermitted parameters: format, id
    {"comments"=>nil}
    (byebug) params.permit(:id, comments: [:comment, :date])
    [2017-07-20 19:14:43 +0200] [f2b3d7c8-c84a-43a5-b48f-0f634be49dc7] Unpermitted parameter: format
    {"id"=>"13534543543", "comments"=>nil}
    

    (byebug) params.permit( :comments => [:comment, :date])
    [2017-07-20 19:14:43 +0200] [f2b3d7c8-c84a-43a5-b48f-0f634be49dc7] Unpermitted parameters: format, id
    {"comments"=>nil}
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   jvillian    8 年前

    尝试一下:

    2.3.1 :034 > JSON.parse(params.permit(:comments)[:comments])
    Unpermitted parameters: format, id
     => [{"comment"=>"ndjsnjakldnfljkasdbfhjae", "date"=>"2017-07-20 17:14:38"}]  
    

    params.permit(:comments) 返回仅包含“comments”k,v对的params散列(删除不允许的参数, format id

    2.3.1 :035 > params.permit(:comments)
    Unpermitted parameters: format, id
     => {"comments"=>"[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]"} 
    

    params.permit(:comments)[:comments] 选择 :comments

    2.3.1 :036 > params.permit(:comments)[:comments]
    Unpermitted parameters: format, id
     => "[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]" 
    

    JSON.parse(params.permit(:comments)[:comments]) 将字符串转换为正确的ruby数组。

    array 对象

    如果你两者都想要 :注释 :id

    params.permit(:comments, :id)
    Unpermitted parameter: format
     => {"comments"=>"[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]", "id"=>"13534543543"} 
    

    2.3.1 :038 > params.permit(:comments, :id)[:comments]
    Unpermitted parameter: format
     => "[{\"comment\":\"ndjsnjakldnfljkasdbfhjae\",\"date\":\"2017-07-20 17:14:38\"}]" 
    

    以及:

    2.3.1 :039 > params.permit(:comments, :id)[:id]
    Unpermitted parameter: format
     => "13534543543" 
    

    你可能想把它包装成这样:

    def clean_params
      @clean_params ||= params.permit(:comments, :id)
    end
    

    所以你可以做 clean_params[:comments] clean_params[:id]