Je construis un jeu de cartes (base de 52 cartes de cartes à jouer 4 combinaisons * 13 rangs), et j'ai choisi MongoDB pour ce projet.Déplacer un document entre des collections dans Mongo (via Mongoid)
Mon modèle de base est: -> Jeu -> Pont -> Cartes -> Joueurs -> main (comme plate-forme) -> Cartes -> Finale (comme plate-forme) -> cartes -> Fermeture (comme plate-forme) -> cartes
Idéalement je voudrais changer les cartes de la plate-forme du jeu dans les différentes piles que les joueurs ont. Cependant, faire quelque chose comme: game.players[0].hand.cards.push(game.deck.cards.shift(1))
ne fonctionne pas, la carte en question n'est pas retirée du deck du jeu (parce que #delete n'est jamais appelée), et elle n'est pas ajoutée à la main du joueur (de mon compréhension limitée, MongoId ajoutera seulement nouveaux objets à une collection embarquée)
donc, pour déplacer une carte d'une pile à l'autre, je dois essentiellement le faire. jeu = Game.first joueur = jeu. players.first
card = game.deck.cards.shift
copy = Card.new(card.card_id) #read,create
player.hand.cards << copy
if player.save!
card.delete #delete
game.save
end
Non terriblement difficile, mais je fais essentiellement un READ, un DESTROY et un CREATE, pour essentiellement émuler ce qui pourrait être une mise à jour très simple.
Y a-t-il quelque chose qui me manque? Est-ce une limitation de l'ODM de Mongoid? Le déplacement de documents entre les collections est-il un non-non?
Je suis très ouvert aux suggestions sur le modèle, car je ne sais pas si les documents intégrés sont même un bon ajustement pour ce type de problème.
Ci-dessous la plaque de la chaudière correspondante
class Deck
include Mongoid::Document
field :is_deck, :type => Boolean
embedded_in :game
embedded_in :player
embeds_many :cards
end
class Card
include PlayingCards
include Mongoid::Document
embedded_in :deck
field :card_id, :type => Integer
field :idx, :type => Integer #used to maintain shuffled order since mongodb is insertion order
field :rank, :type => String
field :suit, :type => String
end
class Game
include Mongoid::Document
embeds_one :deck #deck players draw from
embeds_many :players
field :current_player, type: Integer
field :num_players, type: Integer
end
class Player
include Mongoid::Document
embedded_in :game
embeds_one :hand, class_name: "Deck"
embeds_one :closing, class_name: "Deck"
embeds_one :final, class_name: "Deck"
end
Merci à l'avance!