У меня есть несколько вопросов о MongoID и встроенных отношениях в Rails.
В моей модели у меня есть:
class Board
include Mongoid::Document
attr_accessible :title
field :title, :type => String
#has_and_belongs_to_many :users
embeds_many :items
end
, когда я звоню
Board.all
itвозвращает всю коллекцию, включая также: items.
Я читал во многих статьях / форумах, что использование встроенных отношений MongoDB предпочтительнее ссылочных, но у меня есть несколько вопросов:
- А как насчет выступлений?каждый раз, когда я хочу получить доску, я также извлекаю элементы внутри нее: иногда это может быть полезно, но в случае, если мне нужна только информация о доске, а не предметы внутри нее, я должен создать новый метод, чтобы не извлекать элементы.
- Когда я хочу обновить элемент, БД перезагрузит весь документ, а не только элемент, который я хочу получить, верно?
До сих пор я заметил, что единственное преимущество виспользование встроенного документа для чего-то вроде того, что в SQL называется «объединением», но я также вижу много проблем с производительностью, есть важная причина для использования встроенных отношений над ссылочными отношениями?
EDIT
Как указал Адам С, мои мысли высвобождаются в ситуациях, подобных этим:
, как было объяснено ранее, у меня будет каждый Совет с множеством Предметов внутри него и с использованием лесов Rails генерирует методы, которые получаютвесь документ Правления из базы данных, но много раз (например, при редактировании Правления) я хочу загрузитьдокумент без части Items.
Поскольку я буду использовать в основном вызовы JSON, моя идея заключалась в том, чтобы добавить в URL необязательный параметр, такой как "? get_items", который должен быть установлен в TRUE, если я также хочу получить элементыв других ситуациях я бы использовал Mongoid:
Model.without
Например, давайте возьмем действие index:
def index
@boards = Board.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @boards }
end
end
Мне нужно будет получить только поля, указанные в модели платы (в этомтолько для случая: название) без элементов, поэтому я могу использовать:
def index
@boards = Board.without :items
respond_to do |format|
format.html # index.html.erb
format.json { render json: @boards }
end
end
Что вызывает у меня некоторые проблемы?