respond_to:json表现得非常奇怪

时间:2014-10-16 15:52:38

标签: ruby-on-rails json

我有一个控制器:

class ThingController < ActionController
  respond_to :json

  def create
    puts "CREATE " + params.inspect
  end
end

和测试:

require "spec_helper"

describe "/thing" do
  context "create" do
    it "should get params" do
      params = {"a" => "b", "c" => ["d"], "e" => [], "f"=>"",
                "g"=>nil, , "controller" => "NOPE", "action" => "NOPE"}
      post uri, params
    end
  end 
end

运行时,会记录以下内容:

CREATE {"a"=>"b", "c"=>["d"], "action"=>"create", "controller"=>"thing"}

我的问题是:

  • e去了哪里?我希望它反序列化为一个空数组,而不是一无所有。
  • 为什么actioncontroller参数混合在一起? Aren的身体和导轨内部是完全分开的问题吗?
  • 因此,我的actioncontroller JSON字段被覆盖了。我如何访问这些?
  • 这不是接受JSON的正确方法吗?

我是Rails的新手,但我做了很多Django。

2 个答案:

答案 0 :(得分:0)

rails中间件将添加动作和控制器参数,因此如果您仍想访问自定义值,则必须将它们放在嵌套哈希中。

尝试将format: 'json'添加到测试中的参数中。这将发送一个不同的内容类型标题,并可能有助于正确序列化params以保持e param。

答案 1 :(得分:0)

此问题有两个部分:您需要确保将参数作为JSON发送,并且还要将它们解释为JSON。

基本上,你必须

  • 将您的参数编码为JSON
  • 设置适当的内容类型并接受标题

请参阅POSTing raw JSON data with Rails 3.2.11 and RSpec