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"}]}}'