web-dev-qa-db-ja.com

Railsでモデル属性をどのように発見しますか?

クラスファイルで明示的に定義されていないため、すべてのモデルクラスにどの属性/プロパティが存在するかを簡単に確認することは困難です。

モデルの属性を検出するために、schema.rbファイルを開いたままにして、必要に応じてそれと作成中のコードを切り替えます。これは機能しますが、スキーマファイルを読み取って属性を取得するか、モデルクラスファイルを使用してメソッドをチェックするか、属性とメソッドを呼び出すために記述する新しいコードを切り替える必要があるため、不格好です。

私の質問は、Railsコードベースを初めて分析するときに、どのようにモデル属性を発見するのですか? schema.rbファイルを常に開いたままにしますか、それともスキーマファイルとモデルファイルを絶えず切り替える必要のないより良い方法がありますか?

133
gbc

スキーマ関連のもの

Model.column_names         
Model.columns_hash         
Model.columns 

ARオブジェクトのインスタンス変数/属性の場合

object.attribute_names                    
object.attribute_present?          
object.attributes

スーパークラスからの継承のないインスタンスメソッドの場合

Model.instance_methods(false)
264
penger

Annotate modelsというRailsプラグインがあります。これは、モデルファイルの上部にモデル属性を生成します。リンクは次のとおりです。

https://github.com/ctran/annotate_models

アノテーションの同期を保つために、各デプロイ後にアノテーションモデルを再生成するタスクを作成できます。

25
ez.

データベースのプロパティとデータ型だけに興味がある場合は、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
12
Nick

モデルを説明するには、次のスニペットを使用します

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

繰り返しますが、これは、あなたがActiveRecordを説明するためにきれいな活字を見ている場合です。

9
Haris Krajina
some_instance.attributes

ソース: blog

4
mcandre