使用params自动映射Mongoid中的关联

时间:2010-11-14 04:56:15

标签: ruby-on-rails mongoid

我正在使用Mongoid,当我.update_attributes使用params [:model_name]的references_one模型时,我收到错误...

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

我明白为什么会这样。当它想要的是对另一个Mongoid :: Document的引用时,Mongoid试图将.association_name映射到params散列中的字符串值。我得到了。

我想知道的是,是否有一种全球性的解决方法。目前我已经通过执行以下操作解决了这个问题......

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

这适用于,但是我宁愿每次都修复它,以便每次进行更新时都不会手动映射相关模型。这肯定会违反DRY。

1 个答案:

答案 0 :(得分: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