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

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

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

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

Ответ 1

Для связанных с Схем материалов

Model.column_names         
Model.columns_hash         
Model.columns 

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

object.attribute_names                    
object.attribute_present?          
object.attributes

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

Model.instance_methods(false)

Ответ 2

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

https://github.com/ctran/annotate_models

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

Ответ 3

Если вас интересуют только свойства и типы данных из базы данных, вы можете использовать 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

Ответ 4

Чтобы описать модель, я использую следующий фрагмент

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

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

Ответ 5

some_instance.attributes

Источник: blog