加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在一个POST中创建父对象和子对象的最佳方法是

发布时间:2020-12-17 02:37:11 所属栏目:百科 来源:网络整理
导读:我有两个应用程序,App1和App2. App1向App2发布 JSON有效负载,其中包含父对象和子对象的数据.如果父对象已经存在于App2中,那么我们会更新父记录(如果有任何更改)并在App2中创建子记录.如果父对象在App2中不存在,我们需要先创建它,然后创建子对象并将它们关联
我有两个应用程序,App1和App2. App1向App2发布 JSON有效负载,其中包含父对象和子对象的数据.如果父对象已经存在于App2中,那么我们会更新父记录(如果有任何更改)并在App2中创建子记录.如果父对象在App2中不存在,我们需要先创建它,然后创建子对象并将它们关联起来.现在我这样做:

class ChildController
  def create
    @child = Child.find_or_initialize_by_some_id(params[:child][:some_id])
    @child.parent = Parent.create_or_update(params[:parent])

    if @child.update_attributes(params[:child])
      do_something
    else
      render :json => @child.errors,:status => 500
    end
  end
end

像这样创建/更新父母感觉很脏.有没有更好的方法来解决这个问题?谢谢!

解决方法

作为起点,您需要在模型中创建关联,然后在Parent上包含accepts_nested_attributes_for.

通过在模型中创建的关联,您应该能够非常轻松地操作关系,因为您自动获得了一系列用于管理关系的方法.例如,您的父/子模型可能如下所示:

在您的父模型中:

class Parent < ActiveRecord::Base
  has_many :children
  accepts_nested_attributes_for :children

在您的儿童模型中:

class Child < ActiveRecord::Base
  belongs_to :parent

然后,您应该能够在控制器中构建关联,如下所示:

def new
    @parent = Parent.children.build
end

def create
   @parent = Parent.children.build(params[:parent])
end

然后,nested_attributes属性允许您通过操作Parent更新Child的属性.

以下是有关主题的Rails API:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读