Я в Rails.Как настроить модель так, чтобы каждый элемент массива Collage "has_one" работал? - PullRequest
0 голосов
/ 07 февраля 2012

Я сижу здесь в Rails 3 и MongoDB и пытаюсь связать модели так, как никогда раньше не делал. Я хочу создать коллаж из рабочих картинок, но вместо того, чтобы иметь коллаж, таблицу слайдов, рабочую таблицу и таблицу изображений, я хочу, чтобы каждый коллаж представлял собой массив с именем «слайды», где каждый элемент в « слайды "это рабочий идентификатор.

Итак, коллаж - это массив идентификаторов работы.

Вот что находится в базе данных (кроме клиентов, работы и прочего):

puts 'Adding sample slide data...'
Collage.create(slides: [client.work.first.id, client.work.second.id, client.work.third.id])
puts 'Added sample slide data'

Я хочу как-то связать модели вместе, как collage.slide [] has_one Work, а работа own_to collage.slide [], чтобы я мог в итоге написать

collage.slides[1].work.image

но я не знаю, какими должны быть отношения между моделями. collage.slides [1] является идентификатором работы, поэтому сейчас работает следующее:

Work.find(collage.slides[1]).image

но это программирование в стиле Майами. Я надеюсь, что это достаточно ясно, извините, если это не так.

1 Ответ

0 голосов
/ 08 февраля 2012

has_one для отношений один-к-одному.Это не то, что вы хотите в этом случае.

Если вы использовали mongoid, это один дизайн, который может работать для вас.В нем есть класс Collage, который встраивает много слайдов.

class Collage
  include Mongoid::Document
  embeds_many :slides
end

class Slide
  include Mongoid::Document
  embedded_in :collage
  belongs_to :works
end

class Work
  include Mongoid::Document
  has_many :Slides
  field :image_url, type: String
end

Если вам не нужны вспомогательные методы для классов, просто создайте массивы и внедренные документы самостоятельно и управляйте ими с помощью драйвера Ruby по мере необходимости,По сути, эти определения классов создают следующие документы коллажа:

Коллаж:

{
  "slides": [
    {
      "works": [ work_id, work_id , ....]
    },
    {
      "works": [ work_id, work_id , ....]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...