クラスファイルで明示的に定義されていないため、すべてのモデルクラスにどの属性/プロパティが存在するかを簡単に確認することは困難です。
モデルの属性を検出するために、schema.rbファイルを開いたままにして、必要に応じてそれと作成中のコードを切り替えます。これは機能しますが、スキーマファイルを読み取って属性を取得するか、モデルクラスファイルを使用してメソッドをチェックするか、属性とメソッドを呼び出すために記述する新しいコードを切り替える必要があるため、不格好です。
私の質問は、Railsコードベースを初めて分析するときに、どのようにモデル属性を発見するのですか? schema.rbファイルを常に開いたままにしますか、それともスキーマファイルとモデルファイルを絶えず切り替える必要のないより良い方法がありますか?
スキーマ関連のもの
Model.column_names
Model.columns_hash
Model.columns
ARオブジェクトのインスタンス変数/属性の場合
object.attribute_names
object.attribute_present?
object.attributes
スーパークラスからの継承のないインスタンスメソッドの場合
Model.instance_methods(false)
Annotate modelsというRailsプラグインがあります。これは、モデルファイルの上部にモデル属性を生成します。リンクは次のとおりです。
https://github.com/ctran/annotate_models
アノテーションの同期を保つために、各デプロイ後にアノテーションモデルを再生成するタスクを作成できます。
データベースのプロパティとデータ型だけに興味がある場合は、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
モデルを説明するには、次のスニペットを使用します
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
繰り返しますが、これは、あなたがActiveRecord
を説明するためにきれいな活字を見ている場合です。
some_instance.attributes
ソース: blog