代码之家  ›  专栏  ›  技术社区  ›  T. Stone

使用参数自动映射Mongoid中的关联

  •  1
  • T. Stone  · 技术社区  · 15 年前

    我正在使用Mongoid,当我 .update_attributes 在具有 references_one

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

    我明白为什么会这样。Mongoid正在尝试绘制这张地图 .association_name 当它想要引用另一个Mongoid::Document时,它将调用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 回复  |  直到 15 年前
        1
  •  0
  •   rwilliams    15 年前

    这是您可以包含在所有模型中的示例模块

    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