Bagaimana Anda menemukan atribut model di Rails?


142

Saya merasa sulit untuk dengan mudah melihat atribut / properti apa yang ada pada semua kelas model saya karena mereka tidak secara eksplisit didefinisikan dalam file kelas saya.

Untuk menemukan atribut model, saya membiarkan file schema.rb tetap terbuka dan beralih di antaranya dan kode apa pun yang saya tulis sesuai kebutuhan. Ini berfungsi tetapi kikuk karena saya harus beralih antara membaca file skema untuk mengambil atribut, file kelas model untuk memeriksa metode, dan kode baru apa pun yang saya tulis untuk memanggil atribut & metode.

Pertanyaan saya adalah, bagaimana Anda menemukan atribut model ketika Anda menganalisis basis kode Rails untuk pertama kalinya? Apakah Anda membiarkan file schema.rb tetap terbuka sepanjang waktu, atau adakah cara yang lebih baik yang tidak melibatkan lompatan antara file skema & file model secara konstan?


7
Terima kasih atas jawaban di bawah ini. Kedengarannya seperti tidak ada cara yang baik untuk mendeklarasikan nama-nama atribut dalam file source model, melainkan menjaga terminal terbuka dan menyodok objek untuk mengetahui sifat-sifatnya.
gbc

Jawaban:


276

Untuk hal-hal terkait Skema

Model.column_names         
Model.columns_hash         
Model.columns 

Misalnya variabel / atribut dalam objek AR

object.attribute_names                    
object.attribute_present?          
object.attributes

Misalnya metode tanpa warisan dari kelas super

Model.instance_methods(false)

10
Untuk mendapatkan asosiasi juga, Anda dapat melakukan: Model.reflect_on_all_associations.map (&: name)
vasilakisfil

1
Dalam ActiveRecord 5 (dan mungkin sebelumnya) Anda dapat menelepon Model.attribute_names.
aceofbassgreg


15

Jika Anda hanya tertarik pada properti dan tipe data dari database, Anda dapat menggunakannya 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)"

Atau, setelah menjalankan rake db:createdan rake db:migrateuntuk lingkungan pengembangan Anda, file tersebut db/schema.rbakan berisi sumber otoritatif untuk struktur database Anda:

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

Untuk menjelaskan model, saya menggunakan cuplikan berikut

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

Sekali lagi ini adalah jika Anda mencari cetakan yang cukup untuk menggambarkan Anda ActiveRecordtanpa Anda akan melalui migrasi atau melompat pengembang itu sebelum Anda cukup baik untuk berkomentar di atribut.


Ini sempurna untuk mencetak semua atribut dari semua instance untuk model tertentu - terima kasih!
ConorB

4
some_instance.attributes

Sumber: blog


some_class.attributes.keys adalah sedikit lebih bersih
klochner

bertanya-tanya apakah ada IDE yang menggunakan ini untuk pelengkapan otomatis? Sepertinya hal yang jelas dilakukan untuk model rel. Saya selalu kecewa ketika saya mulai mengetik nama atribut dan tidak lengkap secara otomatis.
frankodwyer

2
@frankodwyer - RubyMine tidak, meskipun saya yakin pasti ada yang lain.
Matt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.