【问题标题】:Strong parameters with json array带json数组的强参数
【发布时间】:2017-07-20 17:35:26
【问题描述】:

我已经阅读了这个答案how to permit an array with strong parameters,但我无法使用 params.permit 从使用 rails 4.2 的 byebug 会话中弄清楚这种情况:

如何提取 cmets 参数?

(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}

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    试试这个:

    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) 返回仅包含“cmets”k,v 对的参数哈希(删除未经允许的参数,formatid):

    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​​ 数组。

    从那里,您可以随意使用 ruby​​ array 对象。

    如果你想要:comments: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]

    【讨论】:

    • 感谢您的回答。发生,如果我想允许 id 和 cmets
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多