Как вы обнаруживаете атрибуты модели в 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