Ruby でオブジェクトのすべてのメソッドをリストするにはどうすればいいですか? 質問する

Ruby でオブジェクトのすべてのメソッドをリストするにはどうすればいいですか? 質問する

特定のオブジェクトがアクセスできるすべてのメソッドを一覧表示するにはどうすればよいでしょうか?

@current_userアプリケーション コントローラで定義されたオブジェクトがあります。

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

ビューファイルで利用できるメソッドを確認したい。具体的には、:has_many関連付けが提供するメソッドを確認したい。(:has_many すべき提供はしていますが、確認したいです。

ベストアンサー1

以下に、基本 Object クラスにはない、User クラスにあるメソッドをリストします。

>> User.methods - Object.methods
=> ["field_types", "maximum", "create!", "active_connections", "to_dropdown",
    "content_columns", "su_pw?", "default_timezone", "encode_quoted_value", 
    "reloadable?", "update", "reset_sequence_name", "default_timezone=", 
    "validate_find_options", "find_on_conditions_without_deprecation", 
    "validates_size_of", "execute_simple_calculation", "attr_protected", 
    "reflections", "table_name_prefix", ...

methodsはクラスおよびクラス インスタンスのメソッドであることに注意してください。

以下は、User クラスにある、ActiveRecord 基本クラスにはないメソッドです。

>> User.methods - ActiveRecord::Base.methods
=> ["field_types", "su_pw?", "set_login_attr", "create_user_and_conf_user", 
    "original_table_name", "field_type", "authenticate", "set_default_order",
    "id_name?", "id_name_column", "original_locking_column", "default_order",
    "subclass_associations",  ... 
# I ran the statements in the console.

Userクラスで定義された(多くの)has_many関係の結果として作成されたメソッドは、ない通話の結果に表示されますmethods

追加した:has_many はメソッドを直接追加しないことに注意してください。代わりに、ActiveRecord の仕組みは Rubymethod_missingresponds_toテクニックを使用してメソッド呼び出しをオンザフライで処理します。その結果、メソッドはメソッド結果にリストされませんmethods

おすすめ記事