【发布时间】:2014-04-07 06:43:11
【问题描述】:
基本上,我有两个模型 - 公司和位置。
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
创建公司时(即发送到/companies 的帖子),我希望能够在同一个请求中创建其位置。但由于某种原因,我无法让 Rails 识别嵌套在 Company 内的位置数组。它似乎撕掉了嵌套的 JSON 数组并将其放入 JSON 请求的“根”中。
使用 cURL 的示例 POST 请求:
curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/companies -d '{"employee_count":320,"locations":[{"lat":"-47.5", "lon":"120.3"},{"lat":"78.27", "lon":"101.09"}]}'
示例服务器输出:
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 对象内,因此当 CompaniesController#create 尝试创建 Company 实例时,它的 Locations 数组是 nil。此外,employee_count 属性重复了两次,这也有点奇怪。 有谁知道为什么会发生这种情况以及如何解决?
作为参考,我的 CompaniesController 中的白名单如下所示:
params.require(:company).permit(
:employee_count,
locations: [:lat, :lon]
)
我的服务器是 Thin (1.6.2),它几乎是一个全新的/默认的 Rails 应用程序,没有特殊配置。
【问题讨论】:
-
检查这个:stackoverflow.com/questions/845366/…它可能对你有帮助!
-
强参数中的嵌套属性应该这样调用:locations_attributes(都是复数)。
-
@rails4guides.com 没错!
-
您必须向我们展示您的表单和
new/create控制器操作——您遇到的问题是您没有正确传递嵌套属性(您必须构建 ActiveRecord 对象当您发送请求时等)。如果您向我们展示您的控制器操作和表单,我可以写一些帮助
标签: ruby-on-rails json post ruby-on-rails-4 thin