Mongoid: можно ли встраивать многие и ссылаться на одно из встроенных?

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

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", но для меня имеет больше смысла встраивать множество партитур, а затем ссылаться на одну из них как "лучшую". Это возможно?

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам