Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在功能测试中发布原始XML?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在功能测试中发布原始XML?

Ruby on rails 如何在功能测试中发布原始XML?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,假设我有一个REST服务,它通过POST处理XML: class DepartmentsController < ApplicationController # POST /departments/1/employees.xml def create params[:employees].each do |e| # <employees type="array"> @employee = Employee.new(e) @employe

假设我有一个REST服务,它通过POST处理XML:

class DepartmentsController < ApplicationController

  # POST /departments/1/employees.xml
  def create
    params[:employees].each do |e| # <employees type="array">
      @employee = Employee.new(e)
      @employee.save
    end
    respond_to do |format|
      format.any { head status }
    end
  end

end
我得到的错误是:

NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
“params”变量似乎缺少post数据:

{"department_id"=>234, "controller"=>"employees", "action"=>"create"}
我已经检查了“xml_out”的内容,它确实包含格式正确的xml。我做错了什么


感谢您的帮助:)

尝试将代码更改为:

post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)
编辑

根据评论,最终解决方案是:

post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)["employees"]

尝试将代码更改为:

post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)
编辑

根据评论,最终解决方案是:

post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)["employees"]

如果我这样做,原始XML只是作为参数传递(没有自动哈希)。在这种情况下,我需要自己在控制器中完成。刚刚编辑了我的答案,使用Hash.from_xml。我认为rails会在请求中包含xml的参数时自动为您执行此操作。我认为它是有效的,但实际上以这种方式散列xml并将其作为'employees'参数发送会导致动作控制器端的{“employees”=>{“employees”=>[{…,而我只希望是{“employees”=>[{”…哦,试试post:create,:department\u id=>234,Hash.from\u xml(xml\u out)或post:create,:department\u id=>234,:employees=>Hash.from\u xml(xml\u out)[“employees”]如果我这样做,原始xml只是作为参数传递(没有自动哈希)。在这种情况下,我需要自己在控制器中进行操作。刚刚编辑了我的答案,使用Hash.from_xml。我认为rails会在请求中包含xml的参数时自动为您执行此操作。我认为这是可行的,但实际上这样对xml进行哈希并将其作为'employees'参数发送会导致{“employees”=>{“employees”=>[{“…在action controller方面,我只希望{“employees”=>[{”…哦,试试post:create,:department\u id=>234,Hash.from\u xml(xml\u out)或post:create,:department\u id=>234,:employees=>Hash.from\u xml(xml\u out)[“employees”]