"8b62f4ac-8588-11e3-a094-123-6ren">
gpt4 book ai didi

ruby-on-rails - 无法从 Rails Controller 中的 POST 中提取嵌套的 JSON 数据

转载 作者:行者123 更新时间:2023-12-04 07:29:34 36 4
gpt4 key购买 nike

我正在尝试配置我的 Controller 来处理从另一个网站通过 POST 发送的参数。我的日志显示我收到的参数如下:

{"page_id"=>"8b62f4ac-8588-11e3-a094-12314000b04c", "page_name"=>"test form", "variant"=>"b", "page_url"=>"http://get.xxxxxxx.com/test-form ", "data.json"=>"{\"name\":[\"Dave\"],\"email\":[\"xxxx@me.com\"],\"phone\":[\"4447177265\"],\"ip_address\":[\"64.114.175.126\"],\"time_submitted\":[\"07:34 AM UTC\"]}", "data.xml"=>"\n\n 戴夫\n xxxx@me.com\n 2507177265\n 64.114.175.126\n 07:34 AM UTC\n"}

最初我以为 Rails 会自动解析 params 中的 JSON,我可以通过正常方式访问它们。所以我这样写了注册 Controller :

class Api::RegistrationsController < Devise::RegistrationsController

skip_before_filter :verify_authenticity_token
respond_to :json

def create

@user = User.new(user_params)

if @user.save
render json: @user.as_json( email: @user.email), status: 201
return
else
warden.custom_failure!
render json: @user.errors, status: 422
end
end

def user_params
params.require(:'data.json').permit(:email, :name, :phone, :comments, :residency, :qualification, :acknowledgement) if params.present?
end

end

但是,它根本不起作用。我收到一个错误 undefined method 'permit' for string。所以很明显我没有正确访问 JSON。是否可能因为 JSON 被转义而引发错误?

我已经在 IRC 上搜索和询问了几天,但我没有更进一步。

我可以将格式正确的 JSON 传递给 Controller ​​并且它工作正常(需要更改参数)

我很困惑,因为我需要能够使用 JSON 数据创建新用户。任何帮助将不胜感激。我只是不知道从这里往哪个方向走。

最佳答案

params.require(:'data.json') 返回一个 JSON 主体,它是一个字符串,但是您的 Controller 不解释该字符串,而是需要一个哈希。

您可以使用 JSON 的解析类方法将 JSON 字符串转换为 Hash 对象,如下所示:

require 'json'
JSON::parse(json_string)

关于ruby-on-rails - 无法从 Rails Controller 中的 POST 中提取嵌套的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375284/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com