6

App1とApp2の2つのアプリケーションがあります。App1は、親オブジェクトと子オブジェクトのデータを含むJSONペイロードをApp2に送信します。親オブジェクトがすでにApp2に存在する場合、何かが変更された場合は親レコードを更新し、App2に子レコードを作成します。親オブジェクトがApp2に存在しない場合は、最初にそれを作成し、次に子オブジェクトを作成して2つを関連付ける必要があります。今、私はこのようにやっています:

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

そのような親の作成/更新について何か汚い感じがします。これについてもっと良い方法はありますか?ありがとう!

4

2 に答える 2

6

開始点として、モデルに関連付けを作成してから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 プロパティを使用すると、親を操作して子の属性を更新できます。

このトピックに関する Rails API は次のとおりです: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2012-10-19T19:02:07.660 に答える
1

accept_nested_attributes_for親子関係を処理するために使用します。参考になるブログ投稿はこちらです。 /

于 2012-10-19T18:24:06.593 に答える