【问题标题】:Saving Data without nested data保存没有嵌套数据的数据
【发布时间】:2014-08-23 07:50:57
【问题描述】:

当我尝试保存具有嵌套属性的模型时,我遇到了一个问题。我要模型。一个人有很多衬衫。但是当我尝试通过 JSON POST 请求保存一个人时。只有 Person 被存储,而不是衬衫。有谁知道,我在这里缺少什么?

型号

class Person < ActiveRecord::Base
    has_many :shirts
    accepts_nested_attributes_for :shirts

    validates :shirts, presence: true
end

控制器

class PersonsController < ApplicationController
  ...
  def new
     @person = Person.new
  end

  def create
        @person = Person.new(person_params)
  ...
  def person_params
      params.require(:person).permit(:name, :age, :shirts_attributes => [:color, :size])
  end
end

POST 本地主机:3000/人

{
    "name" : "Jon",
    "age" : 34,
    "shirts_attributes" : [
      {
        "color" : "black",
        "size" : "XL"
      },
      {
        "color" : "white",
        "size" : "XS"
      }
    ] 
}

【问题讨论】:

  • 请发布您的new 方法和form code。
  • 为什么需要表单代码?我正在向 URL localhost:3000/persons 发出 POST 请求,包括发布的 JSON?
  • 您是否发布了错误的控制器代码? CalendersController 在这里做什么?
  • 你应该发布PersonsController。
  • @Pavan,你是对的,我编辑了代码...

标签: json ruby-on-rails-4 nested-attributes


【解决方案1】:

你应该使用build来保存shirts以及person。PersonsController的new方法应该是这样的

def new
 @person = Person.new
 @person.shirts.build #This is what you needed.
end

【讨论】:

  • 我认为这不是nested_attributes 应该如何工作的。 rails magic 应该自动将嵌套的 json 包装到模型中?!
  • 我试过了,但它仍然无法保存衬衫。我发现,如果我将 wrap_parameters include: [:shirts_attributes] 添加到 PersonsController 中,它会这样做,但我不知道为什么?无论如何,非常感谢您的帮助和支持@Pavan
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多