2013-03-03 56 views
2

我已经看到了使用accepts_nested_attributes_for的例子很多,但仅适用于JSON POST/PUT他们几个人,没有他们的帮助我:/accepts_nested_attributes_for蒙山JSON PUT(更新)

我的应用程序将被用于创建表单。

所以,一个表单有很多form_row,而form_row可以有很多选择(如果它是一个radio的选择)。 所以,我有我的表单模型是这样的:

class Form < ActiveRecord::Base 
    attr_accessible :name 
    has_many :form_rows 
    accepts_nested_attributes_for :form_rows 
end 

和我的控制器看起来像这样:

def update 
    @form = Form.find(params[:id]) 
    @form.update_attributes!(params[:form]) 
end 

这里是JSON我想送

{ 
    "name": "form test 4", 
    "form_rows_attributes": [ 
    { 
     "domtype": "Input", 
     "label": "Super row new" 
    } 
    ] 
} 

在我场景中,表单创建只需要一个名称,然后是用户添加form_rows。

当我这样做时,名称被正确更新,但form_rows根本没有创建。我的控制台中没有错误,只是表单的UPDATE。

我在做什么错?

回答

6

你的JSON需要嵌套一个多层次,因此params[:form]通话将真正找到PARAMS:

{ 
    "form": { 
    "name": "form test 4", 
    "form_rows_attributes": [ 
     { 
     "domtype": "Input", 
     "label": "Super row new" 
     } 
    ] 
    } 
} 
+0

我已经试过了,但只有名称被更新。不添加form_rows:/ – Olivier 2013-03-04 08:59:27

+0

Oups抱歉,它的工作原理,我做错了。不过,我仍然有问题。我form_row可以有很多选择,但这样的{ “形式” 一个JSON:{ “名”: “形式测试4”, “form_rows_attributes”: { “domtype”: “输入”, “标签” : “超级排新”, “选择”: { “名”: “选择1”, “值”: “VALUE1” } ] } ] } } 不工作: /我有一个错误: ActiveModel :: MassAssignmentSecurity :: FormsController中的错误#update 无法整体分配受保护的属性es:choices – Olivier 2013-03-04 11:44:53

+0

@Tagazok你在'FormRow'模型里面有'attr_accessible:choices'吗?你的'FormRow'模型中还需要'accep_nested_attributes_for:choices'。 – patrickmcgraw 2013-03-04 17:51:16