我正在尝试配置我的控制器来处理从另一个网站通过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数据创建新用户。任何帮助都会非常感激。我只是不知道从这里走向何方。
答案 0 :(得分:2)
params.require(:'data.json')返回一个JSON主体,它是一个字符串,但是你的控制器不会解释字符串但是需要一个Hash。
您可以使用JSON的parse类方法将JSON字符串转换为Hash对象,如下所示:
require 'json'
JSON::parse(json_string)