¿Cómo descubrir atributos de modelo en Rails?
Me resulta difícil ver fácilmente qué atributos/propiedades existen en todas mis clases modelo, ya que no están explícitamente definidas en mis archivos de clase.
Para descubrir los atributos del modelo, conservo el esquema.rb archivo abierto y voltear entre él y cualquier código que estoy escribiendo según sea necesario. Esto funciona, pero es torpe porque tengo que cambiar entre la lectura del archivo de esquema para recoger los atributos, el archivo de clase del modelo para comprobar los métodos, y cualquier código nuevo que estoy escribiendo para llamar atributos y métodos.
Mi pregunta es, ¿cómo descubre los atributos del modelo cuando está analizando una base de código Rails por primera vez? ¿Conservas el esquema?archivo rb abierto todo el tiempo, o hay una mejor manera que no implica saltar entre el archivo de esquema y el archivo de modelo constantemente?
5 answers
Para cosas relacionadas con el Esquema
Model.column_names
Model.columns_hash
Model.columns
Por ejemplo variables / atributos en un objeto AR
object.attribute_names
object.attribute_present?
object.attributes
Por ejemplo métodos sin herencia de superclase
Model.instance_methods(false)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-02 08:14:40
Existe un plugin de rails llamado Annotate models, que generará los atributos del modelo en la parte superior de los archivos del modelo aquí está el enlace:
Https://github.com/ctran/annotate_models
Para mantener la anotación sincronizada, puede escribir una tarea para volver a generar modelos de anotaciones después de cada implementación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-24 17:21:34
Si solo está interesado en las propiedades y tipos de datos de la base de datos, puede usar 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)"
Alternativamente, después de ejecutar rake db:create
y rake db:migrate
para su entorno de desarrollo, el archivo db/schema.rb
contendrá la fuente autorizada para la estructura de su base de datos:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-13 11:22:45
Para describir el modelo utilizo el siguiente fragmento
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
De nuevo, esto es si estás buscando una impresión bonita para describirte ActiveRecord
sin que vayas a través de migraciones o saltes ese desarrollador antes de que fuera lo suficientemente agradable como para comentar en atributos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-13 13:39:37