2013-03-18 4 views
0

У меня есть список игр. Каждый из них имеет встроенный список баллов. Я хотел бы сохранить ссылку на лучший результат за пределами списка баллов.Монгоид: могу ли я внедрить многие и ссылаться на один из встроенных?

class Game 
    include Mongoid::Document 
    field :best_score_id, type: Moped::BSON::ObjectId 
    ... 
    embeds_many :scores 

class Score 
    include Mongoid::Document 
    field :user, type: String 
    field :score, type: Int 

Я пытался делать в belongs_to и has_one, но получил сообщение об ошибке: «ссылающегося на Score документ из документа игры с помощью реляционной ассоциации не допускается, так как история цен встраивается.» Я полагаю, что я могу хранить соответствующие биты показателя в хеше, называемом «best_score», но мне больше смысла вкладывать множество баллов, а затем ссылаться на один из них как «Лучший». Это возможно?

ответ

0

Вы могли бы сделать что-то вроде этого -

Напишите метод, чтобы выбрать лучший результат в игре модели класса -

def best_score 
    score = scores.order_by(:score, :desc).limit(1) 
    if score.nil? 
    nil 
    else 
    score.first 
    end 
end 

И поскольку оценки заделаны в игре, там не будет любой +1 запрос к базе данных также.

+0

Я действительно не хочу загружать оценки, пока они мне не нужны, это довольно большой массив (массив реальных объектов намного больше, чем образец, который я положил в свой пост). – jcollum

+0

Если в большинстве случаев вам нужен только один лучший результат, я думаю, вы должны написать карту-уменьшить этот запрос только с одним лучшим счетом вместе с нужным полем. Или вы можете использовать ссылки вместо использования встроенных, чтобы загрузить оценки позже, когда вам действительно нужно. –

+0

>, которые запрашивают только один лучший результат - справа, но тогда я предполагаю, что мне нужно будет хранить его как хэш ... Просто кажется странным, что я не могу сделать ref и вставить в тот же объект. – jcollum

 Смежные вопросы

  • Нет связанных вопросов^_^