Ответ 1
Mongoid уже предоставляет вам атрибуты для объекта:
Model.new.attributes
Чтобы получить имена для этих атрибутов:
Model.fields.keys
Я создаю бэкэнд-систему, как написано в учебнике Iain Hecker: http://iain.nl/backends-in-rails-3-1, и я пытаюсь адаптировать его к MongoDB с Mongoid.
Итак, когда мне нужно писать в 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
(Я привязал backend к "backend/users # index" ). Backend:: Пользователь наследует пользователя:
class User
include Mongoid::Document
devise_for :users
field :name
field :address
end
Мне просто нужен список полей для этого User: Class, как я думаю (например, [ "email", "name", "address",...]), но я сломал себе голову, пытаясь найти, как это сделать.
Mongoid уже предоставляет вам атрибуты для объекта:
Model.new.attributes
Чтобы получить имена для этих атрибутов:
Model.fields.keys
Использовать встроенный метод:
Model.attribute_names
# => ["_id", "created_at", "updated_at", "name", "address"]
Следует отметить, что Model.fields.keys будет перечислять только полевые ключи, определенные в классе Model. Если вы используете динамические поля, они не будут показаны. Model.attributes.keys также будут включать ключи атрибутов для любых динамических полей, которые вы использовали.
Вы на правильном пути с 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"]