Ruby on rails Rails无法识别POST请求中的嵌套JSON对象

Ruby on rails Rails无法识别POST请求中的嵌套JSON对象,ruby-on-rails,json,post,ruby-on-rails-4,thin,Ruby On Rails,Json,Post,Ruby On Rails 4,Thin,基本上,我有两个模型-公司和地点 class Company < ActiveRecord::Base has_many :locations, dependent: :destroy accepts_nested_attributes_for :locations # Not sure if needed. end class Location < ActiveRecord::Base belongs_to :company end 服务器输出示例: Started

基本上,我有两个模型-公司和地点

class Company < ActiveRecord::Base
  has_many :locations, dependent: :destroy
  accepts_nested_attributes_for :locations # Not sure if needed.
end

class Location < ActiveRecord::Base
  belongs_to :company
end
服务器输出示例:

Started POST "/companies"
Processing by CompaniesController#create as Application/json
Parameters: {"employee_count"=>320, "locations"=>[{"lat"=>"-47.5", "lon"=>"120.3"}, {"lat"=>"78.27", "lon"=>"101.09"}], "company"=>{"employee_count"=>320}}
如您所见,
locations
数组不再位于
company
对象中,因此当companyescontroller\create尝试创建company实例时,其位置数组为
nil
。另外,
employee\u count
属性重复了两次,这也有点奇怪有人知道为什么会发生这种情况以及如何解决吗?

作为参考,以下是my CompanyController中的白名单:

params.require(:company).permit(
  :employee_count,
  locations: [:lat, :lon]
)

我的服务器很瘦(1.6.2),它几乎是一个全新/默认的Rails应用程序,没有特殊配置。

好的,看起来我需要在我的POST请求中将
位置
重命名为
位置
更新(感谢评论中的用户建议)

我还需要将所有属性封装在一个“outer”
company
对象中,而不是JSON的“root”。例如:

curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/companies -d '{"company":{"employee_count":320,"locations":[{"lat":"-47.5", "lon":"120.3"},{"lat":"78.27", "lon":"101.09"}]}}'

检查这个:它可能会帮助你!强参数中的嵌套属性应该这样调用:locations_attributes(两个复数).@rails4guides.com!您必须向我们展示您的表单&
新建
/
创建
控制器操作——问题是您没有正确地传递嵌套属性(您必须在发送请求等时构建ActiveRecord对象)。如果您向我们展示您的控制器操作和表单,我可以写一些帮助
curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/companies -d '{"company":{"employee_count":320,"locations":[{"lat":"-47.5", "lon":"120.3"},{"lat":"78.27", "lon":"101.09"}]}}'