无法从Rails控制器中的POST中提取嵌套的JSON数据

时间:2014-01-27 07:36:02

标签: ruby-on-rails json

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

{“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 Dave \ n xxxx@me.com \ n 2507177265 \ n 64.114.175.126 \ n 07:34 AM UTC \ n“}

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

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

然而,它根本就不起作用。我得到一个错误未定义的方法'permit'为字符串。显然我没有正确访问JSON。是否有可能因为JSON被转义而导致错误?

我一直在谷歌搜索并在IRC询问了几天,但我没有更进一步。

我可以将格式正确的JSON传递给控制器​​,它可以正常工作(需要更改require参数)

我很难过,因为我需要能够使用JSON数据创建新用户。任何帮助都会非常感激。我只是不知道从这里走向何方。

1 个答案:

答案 0 :(得分:2)

params.require(:'data.json')返回一个JSON主体,它是一个字符串,但是你的控制器不会解释字符串但是需要一个Hash。

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

require 'json'
JSON::parse(json_string)