2016-06-29 2 views
1

私はサブシステムという名前のモデルの自己結合関係を作ろうとしています。この場合、サブシステムはJavaパッケージ、クラスまたはメソッドを表します。 は、私はこのようにそれを使用することができましたレールのドキュメントを読ん:他のモデルにも属している場合、自己結合項目を作成する方法を教えてください。

class Subsystem < ActiveRecord::Base 
    has_many :child_subsystems, class_name: "Subsystem", 
          foreign_key: "parent_id" 

    belongs_to :parent, class_name: "Subsystem" 
end 

は私もほとんどの場合、「パーツを作成」で説明されていないカップルの例を見ました。 私の問題は、サブシステムを作成するための最良の方法を探しているからです。 サブシステムモデルもプロジェクトに属しています。私はこの画像makeのそれをよりよく理解することを願ってい

project.subsystems.create(params) 

: は今の私のようなサブシステムを作成します。プロジェクトには0から複数のサブシステムがあり、すべてのサブシステムは0から複数のサブシステムを持つこともできます。

Subsystems

私は人々がビルドとアイテムの関係を作成し、自己が参加することの例を、見てきましたが、私は私が既存で作成することをどのように組み合わせるかわからない:project.subsystems.createを。

誰かが私を助けることができますか?前もって感謝します!

+0

'has_many'リレーションがある場合、Railsは自動的に' build _#{association} 'や' build_child_subsystems'メソッドを提供します – Kkulikovskis

+0

@Kkulikovskisあなたの答えをありがとう!サブシステムを作成し、parent_idを設定する現在の方法と組み合わせる方法を見つけるために、ビルド関連メソッドを見ていきます。 – Maikel

答えて

0

あなたの自己結合関連を作成した方法は、上にスポットがあります。

プロジェクトに属するサブシステムを作成する場合は、project.subsystems.create(...)を実行し、サブシステムに属するサブシステムを作成する場合は、subsystem.child_subsystems.create(..)を実行します。モデルで定義されている関連付けの名前を呼び出すことができます(複数の関連性を持つために複数化されています)。

buildメソッドとcreateメソッドの違いは、build newsaveを呼び出すのに対し、buildはnewを効果的に呼び出すことです。モデルで定義されているように、他のインスタンスに関連付けられたインスタンスを作成または作成する場合、返されるオブジェクトには、作成または作成されたレコードの外部キーが含まれます。

+0

あなたの偉大な明確な答えをありがとう! – Maikel

関連する問題