Ruby on rails Mongoid中的字段别名

Ruby on rails Mongoid中的字段别名,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,有人知道Mongoid是否内置了对别名字段名的支持吗?我已经运行了一些测试,其中我有一个集合,其中包含最少的字段7个字段。如果我使用描述性名称并加载真实数据,然后使用大大缩短的名称并加载相同的真实数据,我会看到我的集合的总大小减少了40%。在查看MongoDB非Ruby的其他驱动程序时,我发现其中一些驱动程序内置了支持,您可以根据描述性名称编写代码,但持久性足够智能,可以使用开发人员定义的别名。我只是想确定Mongoid是否有类似的情况 根据,您应该可以这样使用别名: class Foo i

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

根据,您应该可以这样使用别名:

class Foo
  include Mongoid::Document

  field :fn, :type => String
  alias :first_name :fn
end

请记住,这将不允许您在查询中使用别名,并可能导致一些错误。对于在实例方法和视图中的简单使用,它应该是好的。

实际上,将哈希传递给新的或更新的属性还必须包括以下内容:

  alias :filtered_process :process

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

这允许您的别名映射到创建或更新调用上的字段。然后跟踪别名到字段的映射以抽象这个过程是很简单的。

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

field :fn, :as => :firstname

正如这里概述的:

这不是最好的方法,请参阅z3cko的答案,因为当mongoid已经有了一种方法时,ruby别名正在添加另一个方法名。