Как вы обнаруживаете атрибуты модели в Rails?

Мне трудно понять, какие атрибуты / свойства существуют во всех моих classах моделей, поскольку они явно не определены в моих файлах classов.

Чтобы обнаружить атрибуты модели, я сохраняю файл schema.rb открытым и переворачиваю между ним и любым кодом, который я пишу по мере необходимости. Это работает, но неуклюже, потому что мне нужно переключаться между чтением файла схемы для получения атрибутов, файла classа модели для проверки методов и любого нового кода, который я пишу, для вызова атрибутов и методов.

Мой вопрос: как вы узнаете атрибуты модели при анализе базы данных Rails в первый раз? Сохраняете ли вы файл schema.rb открытым все время или есть лучший способ, который не требует постоянного переключения между файлом схемы и файлом модели?

Что связано с Schema

Model.column_names Model.columns_hash Model.columns 

Например, переменные / атрибуты в объекте AR

 object.attribute_names object.attribute_present? object.attributes 

Например, методы без наследования от суперclassа

 Model.instance_methods(false) 

Существует плагин rails под названием модели Annotate, который будет генерировать ваши атрибуты модели в верхней части ваших файлов модели, вот ссылка:

https://github.com/ctran/annotate_models

чтобы синхронизировать аннотацию, вы можете написать задачу для повторной генерации аннотатных моделей после каждого развертывания.

Если вас интересуют только свойства и типы данных из базы данных, вы можете использовать Model.inspect .

 irb(main):001:0> User.inspect => "User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime)" 

Альтернативно, запустив rake db:create и rake db:migrate для вашей среды разработки, файл db/schema.rb будет содержать авторитетный источник для вашей структуры базы данных:

 ActiveRecord::Schema.define(version: 20130712162401) do create_table "users", force: true do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count", default: 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" t.datetime "created_at" t.datetime "updated_at" end end 

Для описания модели я использую следующий fragment

 Model.columns.collect { |c| "#{c.name} (#{c.type})" } 

Опять же, если вы выглядите довольно печально, чтобы описать вас ActiveRecord если вы не проходите миграцию или не прыгаете с этим разработчиком, прежде чем вы будете достаточно хороши, чтобы комментировать атрибуты.

 some_instance.attributes 

Источник: блог

Давайте будем гением компьютера.