如何获取Mongoid文档的所有字段名称?

时间:2011-08-10 00:49:36

标签: ruby-on-rails ruby mongodb mongoid

我正在构建后端系统,正如Iain Hecker的教程http://iain.nl/backends-in-rails-3-1中所写,我尝试使用Mongoid将其调整为MongoDB。

所以当我需要写backend / resourse_helper.rb

module Backend::ResourceHelper

  def attributes
    resource_class.attribute_names - %w(id created_at updated_at)
  end

end

我收到以下错误:

undefined method `attribute_names' for Backend::User:Class

(我的后端是“后端/用户#index”)。 后端::用户继承自用户:

class User
  include Mongoid::Document

  devise_for :users

  field :name
  field :address
end

我只需要该用户的字段列表:类,我猜(即[“电子邮件”,“名称”,“地址”,......]),但我试图找到方法。

4 个答案:

答案 0 :(得分:35)

Mongoid已经为您提供了对象的属性:

Model.new.attributes

获取这些属性的名称:

Model.fields.keys

答案 1 :(得分:13)

使用内置方法:

Model.attribute_names
# => ["_id", "created_at", "updated_at", "name", "address"]

答案 2 :(得分:3)

需要注意的一点是,Model.fields.keys只列出Model类中定义的字段键。如果使用动态字段,则不会显示它们。 Model.attributes.keys还将包含您使用的任何动态字段的属性键。

答案 3 :(得分:1)

您与attribute_names走在正确的轨道上。我想你只需要确保将模块包含在适当的位置。例如,如果你有相同的模块:

module Backend::ResourceHelper
  def attributes
    resource_class.attribute_names - %w(id created_at updated_at)
  end
end

你的课应该是这样的:

class User
  include Mongoid::Document
  extend Backend::ResourceHelper

  devise_for :users

  field :name
  field :address
end

然后调用User.attributes应该返回["name", "address"]