Rails 3如何在没有_attributes指定的情况下允许传递嵌套属性

时间:2012-08-10 15:28:27

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

当使用accepts_nested_attributes_for时,我不想传递“child_attributes”,而是想传递“child”。我很确定如果我在控制器中添加了很多逻辑来创建记录和子项,我可以做到这一点。但是,为了保持我的控制器清洁和逻辑应有的位置,在这种情况下的模型,我想知道如何在执行POST或PUT时切换rails 3以使用此语法。

{
  "name": "test",
  "child_attributes": [
    {
      "id": 1,
      "name": "test_child_update"
    },
    {
      "name": "test_child_create"
    }
}

相反

{
  "name": "test",
  "child": [
    {
      "id": 1,
      "name": "test_child_update"
    },
    {
      "name": "test_child_create"
    }
}

2 个答案:

答案 0 :(得分:4)

显然,这是不可能的。

答案 1 :(得分:2)

_attributes后缀不会为JSON请求和响应添加任何值,但要在模型层中删除它,您必须使用补丁ActiveRecord。每个人都讨厌修补ActiveRecord关系。

如何在控制器层中执行此操作?

@comment = Comment.new(attributify(:comment))

# snip

# ApplicationController

def attributify()
  # Now I'll go and write this!
end

编辑:完成。控制器mixin位于:https://gist.github.com/johncant/6056036