Мне трудно легко увидеть, какие атрибуты / свойства существуют во всех моих классах модели, поскольку они явно не определены в моих файлах классов.
Чтобы обнаружить атрибуты модели, я держу файл schema.rb открытым и переключаюсь между ним и любым кодом, который пишу по мере необходимости. Это работает, но неуклюже, потому что мне нужно переключаться между чтением файла схемы, чтобы выбрать атрибуты, файлом класса модели для проверки методов и любым новым кодом, который я пишу для вызова атрибутов и методов.
У меня вопрос: как вы обнаруживаете атрибуты модели, когда впервые анализируете кодовую базу Rails? Вы все время держите файл schema.rb открытым или есть лучший способ, который не предполагает постоянного переключения между файлом схемы и файлом модели?
Ответы:
Для материалов, связанных со схемой
Model.column_names Model.columns_hash Model.columns
Например, переменные / атрибуты в объекте AR
object.attribute_names object.attribute_present? object.attributes
Например методы без наследования от суперкласса
Model.instance_methods(false)
источник
Model.attribute_names
.Существует плагин рельсов под названием Annotate models, который будет генерировать атрибуты вашей модели в верхней части ваших файлов модели, вот ссылка:
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
источник
Для описания модели я использую следующий фрагмент
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
Опять же, это если вы выглядите довольно печатно, чтобы описать вас,
ActiveRecord
не проходя через миграцию или переходя к этому разработчику, прежде чем вы были достаточно любезны, чтобы комментировать атрибуты.источник
some_instance.attributes
Источник: блог
источник