2010-11-14 3 views
1

Я использую Mongoid и когда я .update_attributes на модели, которая имеет references_one с использованием Params [: model_name] Я получаю ошибку ...Автоматическое отображение ассоциаций Mongoid с использованием Params

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

Я понимаю, почему это это происходит. Монгоид пытается сопоставить это значение .association_name с строковым значением в хеше params, когда то, что он хочет, является ссылкой на другой Mongoid :: Document. Это я получаю.

Что я хотел бы знать, если есть глобальный способ исправить это. На данный момент я получил вокруг этого вопроса, делая что-то вроде следующего ...

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

Это работает но я предпочел бы иметь исправление, которое исправляет это каждый раз, так что я не вручную сопоставляя связанную модель при каждом обновлении. Это было бы вызывающе нарушением СУХОЙ.

ответ

0

Вот модуль образец, который вы могли бы включать в себя во всех своих моделях

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

За исключением, конечно, RelatedModel бы быть принят в качестве хорошо. Я полагаю, что это достойный подход. Мне придется поиграть с ним. –

Смежные вопросы