json 数组的强参数
Strong parameters with json array
我已经读过这个答案 how to permit an array with strong parameters 但我无法使用 params.permit 来理解这种情况,来自使用 rails 4.2:
的 byebug 会话
如何提取评论参数?
(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}
试一试:
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)
returns 参数散列只有 "comments" k,v 对(删除不允许的参数,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 数组。
从那里,您可以随心所欲地使用 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]
。
我已经读过这个答案 how to permit an array with strong parameters 但我无法使用 params.permit 来理解这种情况,来自使用 rails 4.2:
的 byebug 会话如何提取评论参数?
(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}
试一试:
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)
returns 参数散列只有 "comments" k,v 对(删除不允许的参数,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 数组。
从那里,您可以随心所欲地使用 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]
。