我正在构建后端系统,正如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
我只需要该用户的字段列表:类,我猜(即[“电子邮件”,“名称”,“地址”,......]),但我试图找到方法。
答案 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"]