2010-10-25 3 views
6

Допустим, у меня есть модель FooActiveRecord с полями foo_id, foo_name и foo_description.Rails: получить все поля для объекта, поступающего из базы данных

После этого что-то вроде

@foo = Foo.find(1) 

Есть ли способ "model_fields" таким образом, что: @foo.model_fields() будет возвращать массив:

["foo_id", "foo_name", "foo_description"] ? 

Спасибо за помощь.

ответ

23

Метод attributes, который дает хэш поля и значений. Поэтому вы можете использовать

@foo.attributes.keys 

Чтобы получить массив полей модели.

Существует также метод класса Foo.column_names, который дает вам такую ​​же информацию без необходимости сначала искать запись.

Документация:
ActiveRecord::Base.column_names
ActiveRecord::Base#attributes

+0

Благодаря Эмили для быстрого ответа! Я использую .attributes = все время. Не уверен, почему я об этом не думал ... –

+1

И если вам нужно перебирать атрибуты и значения, это просто сделать с помощью блока: '@foo.attributes.each do | k, v | ' –

+0

Иногда Мне нужны имена столбцов в качестве символов, 'Model.column_names.map (&: to_sym)' для спасения. – Epigene

Смежные вопросы