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 запрос.