【问题标题】:Field aliasing in MongoidMongoid 中的字段别名
【发布时间】:2010-12-09 03:36:56
【问题描述】:

有谁知道 Mongoid 是否内置了对别名字段名称的支持?我一直在运行一些测试,其中我有一个包含最少字段(7 个字段)的集合。如果我使用描述性名称并加载真实数据,然后使用大大缩短的名称并加载相同的真实世界数据,我发现我的集合的总大小减少了 40%。在查看 MongoDB(非 Ruby)的其他驱动程序时,我发现其中一些已内置支持,您可以根据描述性名称编写代码,但持久性足够聪明,可以使用开发人员定义的别名。我只是想确定 Mongoid 是否有类似的东西。

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    实际上最好的方法不是使用 ruby​​ 别名,而是:

    field :fn, :as => :firstname
    

    如此处所述:http://groups.google.com/group/mongoid/browse_thread/thread/ce3298d6a167bd70

    【讨论】:

      【解决方案2】:

      实际上,还必须包括以下内容才能将哈希传递给 new 或 update_attributes:

        alias :filtered_process :process
      
        def process(attrs = nil)
          attrs[:fn] = attrs[:first_name] unless attrs.nil?
          filtered_process(attrs)
        end
      

      这允许您的别名映射到创建或更新调用的字段。然后跟踪别名到字段的映射以抽象此过程将是微不足道的。

      【讨论】:

      • 这不是最好的方法,请参阅 z3cko 的答案,因为当 mongoid 已经有这样做的方法时,ruby 别名正在添加另一个方法名称。
      【解决方案3】:

      根据this answer,您应该可以像这样使用alias

      class Foo
        include Mongoid::Document
      
        field :fn, :type => String
        alias :first_name :fn
      end
      

      请记住,这不会让您在查询中使用别名,并且可能会导致一些错误。在实例方法和视图中简单使用应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多