解析从HTTP POST收到的RAILS 3.0.6中的JSON数据,内容类型为application / x-www-form-urlencoded

时间:2012-02-29 17:02:26

标签: ruby-on-rails json http-headers

我收到来自第三方的HTTP POST,内容类型为' application / x-www-form-urlencoded'在我的RAILS 3.0.6控制器

我尝试将请求解析为 -

job_status = params [' job'] [' status']

以及

recd_json = JSON.parse(params)  job_status = recd_json [' job'] [' status']

但是在这两种情况下,rails控制器都会抛出错误' NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。'

我不确定如何解析JSON(使用此内容类型进行编码)。感谢任何帮助:)

继发布的json: {     " name":" JSON Parser",     " url":" job / test /",     "工作":{         " status":" SUCCESS",         " url":" job / 356 /"     } }

继承RAILS控制器使用Rails.Logger返回的参数:

{" {\" name \":\" JSON Parser \",\" url \":\&#34 ; job / test / \",\" job \":{\" status \":\" SUCCESS \",\& #34; url \":\" job / 356 / \" }" => nil," action" =>" receive_jobs_updates"," controller" =>" jobs" }

错误跟踪:

NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。 在评估nil。[]时发生错误:   app / controllers / jobs_controller.rb:32:在`receive_jobs_updates'

控制器代码: def receive_job_updates

Rails.logger.info params

job_name = params [' name']   job_status = params [' job'] [' status']

render:text => "一切顺利" ,:status => :好的

1 个答案:

答案 0 :(得分:0)

您需要创建一个Job对象:job_status = Job.new(params[:job]).status