Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Many to many relationship update

Anna | 20.06.2014 | нет комментариев
Однажды столкнулся с задачей обновления коллекции отношений many_to_many, перерыл уйма источников, но толкового трактование так и не обнаружил. Хочу представить мое решение.
Выходит, у нас есть 2 объекта — Статья (Article) и Категория (Category). Одна Статья может принадлежать различным Категориям и одна Категория может содержать несколько Статей. Сразу сотворим несколько Категорий.

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

Мы решили сделать Статью «Жерар Депардье» и решили что она может лежать в нескольких Категориях — «Действующие артисты», «Французы»

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

Верю что мое трактование будет пригодным, а если кто знает вариант проще — умоляю рассказать в комментариях.

 

Источник: programmingmaster.ru

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB