Jak odkrywać atrybuty modelu w Rails?

Trudno mi łatwo zobaczyć, jakie atrybuty / właściwości istnieją na wszystkich moich klasach modelu, ponieważ nie są one wyraźnie zdefiniowane w moich plikach klas.

Aby odkryć atrybuty modelu, zachowuję schemat.plik RB Otwórz i przerzuć między nim a dowolnym kodem, który piszę w razie potrzeby. To działa, ale jest niezgrabne, ponieważ muszę przełączać się między czytaniem pliku schematu, aby odebrać atrybuty, plik klasy modelu, aby sprawdzić metody, i jakikolwiek nowy kod, który piszę, aby wywołać atrybuty i metody.

Moje pytanie brzmi: jak odkrywasz atrybuty Modelu, gdy analizujesz bazę kodu Rails po raz pierwszy? Czy zachowujesz schemat.plik RB otwarty przez cały czas, czy istnieje lepszy sposób, który nie wymaga ciągłego przeskakiwania między plikiem schematu i plikiem modelu?

Author: Aerovistae, 2009-08-17

5 answers

Do spraw związanych ze schematem

Model.column_names         
Model.columns_hash         
Model.columns 

Na przykład zmienne / atrybuty w obiekcie AR

object.attribute_names                    
object.attribute_present?          
object.attributes

Na przykład metody bez dziedziczenia z super klasy

Model.instance_methods(false)
 236
Author: penger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-02 08:14:40

Istnieje wtyczka rails o nazwie adnotate models, która wygeneruje atrybuty modelu na górze plików modelu oto link:

Https://github.com/ctran/annotate_models

Aby zachować synchronizację adnotacji, można napisać zadanie do ponownego wygenerowania modeli adnotacji po każdym wdrożeniu.

 25
Author: ez.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 17:21:34

Jeśli interesują Cię tylko właściwości i typy danych z bazy danych, możesz użyć 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)"

Alternatywnie, po uruchomieniu rake db:create i rake db:migrate dla środowiska programistycznego, plik db/schema.rb będzie zawierał autorytatywne źródło struktury bazy danych:

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
 10
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-13 11:22:45

Do opisu modelu używam poniższego fragmentu

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

Znowu to jest, jeśli szukasz ładnego wydruku, aby opisać Cię ActiveRecord bez przechodzenia przez migracje lub skakania tego programisty, zanim byłeś na tyle miły, aby skomentować w atrybutach.

 8
Author: Haris Krajina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-13 13:39:37
some_instance.attributes

Źródło: blog

 4
Author: mcandre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 18:51:36