0

私は、spine.jsがモデル間の多対多の関係をサポートしているかどうか、または関連するモデルIDを両側の配列に格納することで自分で何かを実装するより良い方法にあるかどうかを理解しようとしています。

ドキュメントの例は、1対多の状況のみの非常に単純な例を示していますが、それでも賢くなっていません。私には、スパイン関係の実装が本当に制限されているように見えます。たとえば、新しいインスタンスを作成するのではなく、既存のインスタンスをリレーションに追加する方法がまだわかりません。

私がしなければならないことの最も簡単な例は、タグ付きの典型的なブログです。すべての投稿には多くのタグを付けることができ、すべてのタグには多くの投稿を関連付けることができます。投稿を作成するときに、新しいタグや既存のタグを投稿に追加したいと考えています。特定のタグに関連するすべての投稿を取得できる必要があります。

私を正しい道に導くことができる人はいますか?

4

2 に答える 2

1

申し訳ありませんが、現在同じ問題を解決しようとしているため、多対多の関係についてはお手伝いできませんが、既存のインスタンスの 1 対多に関する限り、 hasMany、hasOne、および belongsTo 関数のオプション パラメータとしての外部キー (デフォルトは '{className}_id')。これらの例は、アイテムをコレクションに明示的に追加する必要があることを暗示しているため、少し誤解を招く可能性がありますが、実際には、関係は外部キーによって定義されます。

class Parent extends Spine.Model
  @configure 'Parent', 'id'
  @hasMany 'children', 'Child', 'parent_id'

class Child extends Spine.Model
  @configure 'Child', 'id', 'parent_id'
  @belongsTo 'parent', 'Parent', 'parent_id'

parent = new Parent 
child1 = new Child(parent_id: parent.id)
child2 = new Child(parent_id: parent.id)

@log parent.children().all() #[child1, child2]
@log child1.parent() is child2.parent() #true

私が見る限り、同じことにnew Child(parent_id: parent.id)なりparent.children().create()ますが、私はSpineJSにかなり慣れていないので、簡単に間違っている可能性があります...

多対多のリレーションシップに関するプル リクエストがいくつかあったと思いますが、Alex MacCaw はこれまでのところそれらを拒否しています (彼は一般的なリレーションシップのアイデアのファンではなく、スパインからそれらを削除することを考えていると思います)。

于 2012-08-15T10:51:31.317 に答える