控制器参数未被Rails正确解释

时间:2012-11-30 18:30:58

标签: ruby-on-rails ruby ruby-on-rails-3 json

我正在努力设置基于API的网络摘要:http://docs.exceptional.io/api/webhooks/

我看到的问题是发布的数据似乎无效。从日志中:

Started POST "/api/1/services/exceptional/13123123123123123123123123123" for 50.16.14.195 at 2012-11-30 04:27:06 +0000
Processing by ApiV1::Services::ExceptionalController#create as XML
  Parameters: {"{\"error\":{\"id\":110938603,\"title\":\"# (Test-20) \\\"Test message-20\\\"\",\"sub_title\":null,\"app\":{\"id\":17456,\"name\":\"mysite.com\"},\"last_occurrence\":{\"id\":266224025,\"request_method\":null,\"url\":null,\"occurred_at\":\"2012-11-30T04:27:01 00:00\",\"backtrace\":null},\"environment\":null,\"first_occurred_at\":\"2012-11-30T04:27:01 00:00\",\"last_occurred_at\":\"2012-11-30T04:27:01 00:00\",\"url\":\"http://getexl.com/xasdasddsa\"}}"=>nil, "room_token"=>"123123123123213"}
Completed 500 Internal Server Error in 12ms

TypeError (can't convert Array into String):
  app/controllers/api_v1/services/exceptional_controller.rb:20:in `create'
  lib/rack/ie_redirect.rb:19:in `call'

路线:

 match "/exceptional/:room_token" => "exceptional#create"

关于为什么params被铁轨腐蚀以及如何解决的任何想法?感谢

控制器代码:

类ApiV1 :: Services :: ExceptionalController< ApiV1 :: APIController

  def create
    exceptional_exception = JSON.parse(params[:error])
  end

exceptional_exception是line是rb:20

1 个答案:

答案 0 :(得分:1)

似乎出错的是您没有正确构建网址。例如。实际错误被rails解释为键。

通常你会像这样写

/api/1/services/exceptional/123123123?error="....<snipped the json>..."

我看到两种解决方法。 Imho最简单的解决方法是编写以下内容:

match '/exceptional/:room_token/:error' => 'exceptional#create'

然后你不必改变任何东西,它就会起作用。

否则你必须正确发布数据,如上所述。

[编辑:评论后]

好的,既然您无法控制正在发生的POST,请返回原始路线,并在控制器中执行以下操作:

def create
  exceptional_exception = JSON.parse(request.body)
end

我认为这应该有用,不完全确定。我不太明白,通常rails会自动处理好,所以我假设P​​OST本身有问题。

第二句话:既然你看似“重建”特殊,为什么不考虑errbit