2010-11-14 3 views
1

J'utilise MongoId et quand je .update_attributes sur un modèle qui a un references_one en utilisant params [: MODEL_NAME] Je reçois l'erreur ...associations cartographie automatique à l'aide MongoId params

@model.update_attributes(params[:model_name]) 
    undefined method `associations' for "...":String 

Je comprends pourquoi ce est passe. Mongoid essaie de mapper ce .association_name à la valeur de chaîne dans le hachage params quand ce qu'il veut est une référence à un autre document Mongoid :: Document. Ce que je reçois.

Ce que je voudrais savoir, c'est s'il existe une façon globale de résoudre ce problème. Pour le moment, j'ai eu ce problème en faisant quelque chose comme ce qui suit ...

model_params = params[:model_name] 
if model_params.has_key? :relationship 
    model_params[:relationship] = RelatedModel.first(:conditions => { :_id => model_params[:relationship] }) 
end 

Cela fonctionne mais je préfère avoir une solution qu'il fixe à chaque fois pour que je ne suis pas mappant manuellement le modèle associé chaque fois que je fais une mise à jour. Cela représenterait une violation de DRY.

Répondre

0

Module est ici exemple que vous pourriez inclure dans tous vos modèles

module MyAppBase 
def my_update_attributes(model_params,related_model) 
    if model_params.has_key? :relationship 
     model_params[:relationship] = related_model.first(:conditions => { :_id => model_params[:relationship] }) 
    end 
    self.update_attributes(model_params) 
    end 
end 

#include it in your model classes 
class MyModel < ActiveRecord::Base 
    include MyAppBase 
    #normal model code 
end 
+0

Sauf bien sûr RelatedModel devrait être passé en tant que bien. Je suppose que c'est une approche décente. Je vais devoir jouer avec ça. –