Datamapper many_to_many関係の更新

かつて、Datamapperを使用するときに、many_to_many関係のコレクションを更新するタスクに直面しました。これは、多くのソースから収集されましたが、説明的な説明は見つかりませんでした。 私の決断を紹介したいと思います。





そのため、2つのオブジェクト-Article(Article)とCategory(Category)があります。 1つの記事が異なるカテゴリに属し、1つのカテゴリに複数の記事が含まれる場合があります。 すぐにいくつかのカテゴリを作成します。

class Article include DataMapper::Resource property :id, Serial property :name, String has n, :categories, :through => Resource end class Category include DataMapper::Resource property :id, Serial property :name, String has n, :articles, :through => Resource end category_d = Category.new category_d.name = " " category_d.save category_f = Category.new category_f.name = "" category_f.save category_v = Category.new category_v.name = "" category_v.save category_r = Category.new category_r.name = "" category_r.save
      
      







私たちは記事「Gerard Depardieu」を作成することを決定し、「Acting Actors」、「French」などのいくつかのカテゴリに含まれることを決定しました。



 article = Article.new article.name = " " article.save category_d = Category.first(:name => " ") category_f = Category.first(:name => "") article.categories << category_d article.categories << category_f article.save
      
      







しばらくして、変更を加えることにしました-カテゴリ「演技俳優」から記事を削除し、カテゴリ「ワインメーカー」に追加し、カテゴリ「ロシア人」に追加します。

そして、ここで最も興味深いことは、マニュアルで説明されているように行うことができるためです-不要な接続を手動で削除し、新しい接続を追加しますが、はるかに簡単に行うことができます-必要な接続の配列を割り当てるだけです。

 article = Article.first(:name => " ") category_v = Category.first(:name => "") category_r = Category.first(:name => "") category_f = Category.first(:name => "") article.categories = [category_v, category_r, category_f] article.save
      
      







私の説明が役に立つことを願っていますが、だれかが簡単にオプションを知っているなら、コメントで教えてください。



All Articles