2012-01-13 3 views
6

J'ai besoin d'associer deux modèles avec un has_many simple. Le problème est que je ne veux pas utiliser l'id (_id) comme clé primaire pour l'association. Je veux toujours que le modèle continue d'utiliser les ObjectIds par défaut pour tout le reste.Touches personnalisées pour l'association Mongoid

(Ceci est en cours d'exécution sur Rails3.1 + MongoId)

Donc, fondamentalement, je veux:

class Message 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message_reports, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 
class MessageReport 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 

Cela ne fonctionne que pour ActiveRecord. Mongoid ne supporte pas l'option primary_key. Comment puis-je obtenir les mêmes résultats pour les collections Mongoid?

Avant de vous dire: ne pas faire ...

La raison pour laquelle j'ai vraiment vraiment besoin de kay sur ce champ et non l'identifiant approprié est que ce sont des messages ... et les message_ids sont uniques ids renvoyé par l'API que j'appelle pour envoyer un message. Plus tard, le même identifiant est reçu dans les rappels de l'autre côté.

Je pourrais juste faire des requêtes et le coller dans une méthode pour trouver les rapports "associés" d'un message et vice versa ... Je préférerais qu'ils soient des associations réelles, si possible. Je pourrais forcer le processus de réception de rapports à rechercher et faire correspondre les objets pour l'association ... mais je préfère ne pas mettre cette responsabilité là quand elle est plutôt superficielle et qu'elle n'a plus rien à faire avec ces données en plus de la valider et de l'enregistrer.

En bref: Je préfère une association :)

+0

+1 pour travailler pro-activement avec les objections :-) –

+0

hehe, j'ai demandé en ligne avant;) –

+0

@MartinWestin avez-vous résolu cela? J'ai exactement le même problème – jbnunn

Répondre

1

Cette fonction n'existe même pas sur MongoId fait le Maître et ce n'est pas prévu dans MongoId 3.0

Faites une demande de fonctionnalité. La communauté Mongoid est vraiment ouverte à l'ajout de nouvelles fonctionnalités si c'est une bonne idée. Pour moi c'est une bonne idée.

Questions connexes