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?
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)
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.
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
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.
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