Атрибуты объекта - PullRequest
       11

Атрибуты объекта

3 голосов
/ 08 сентября 2011

В активной записи есть функция attribute_name, с помощью которой я могу проверить ключи объекта, но я могу проверить пустые ключи для объекта, который имеет MongoID, а не ActiveRecord. Когда я попробовал это, я получил следующий ответ

ruby-1.9.2-p290 :001 > u = User.new
=> #<User _id: 4e684f7771393161cc000001, _type: nil, username: nil, first_name: nil, last_name: nil, email: nil, password: nil, password_salt: nil, password_hash: nil, profile_picture: nil, facebook_id: nil, facebook_enabled: nil, facebook_access_token: nil, twitter_id: nil, twitter_enabled: nil, twitter_access_token: nil, twitter_access_secret: nil, points: nil, remember_token: nil, remember_token_expires_at: nil, active: false, activation_code: nil, activated_at: nil> 
ruby-1.9.2-p290 :002 > u.attributes.keys
=> ["active", "_id"] 

Отображаются только атрибуты, которые не равны нулю. Как я могу проверить все атрибуты, даже если они равны нулю?Я действительно хотел сделать функцию, которая должна использовать user.attributes.keys.include? ('Name')

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Вероятно, вы хотите fields. Атрибуты более или менее связаны с тем, что вы получили из базы данных, поля - это то, что вы определили в своей модели. Для меня следующие работы:

User.fields.keys
User.first.fields.keys
1 голос
/ 20 марта 2014

Чтобы получить ключи в том же порядке, что и столбцы в БД, я использовал это в Rails 3.2 Ruby 1.8.7:

User.content_columns.collect{|c| c.send(:name)}

мое конкретное использование было достигнуто из переменной с массивом объектов

@objects.first.class.content_columns.collect{|c| c.send(:name)}
1 голос
/ 08 сентября 2011
User.attributes.keys

работал со мной, но вы можете попробовать columns

User.columns.map(&:name)
...