特定のオブジェクトがアクセスできるすべてのメソッドを一覧表示するにはどうすればよいでしょうか?
@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_missing
とresponds_to
テクニックを使用してメソッド呼び出しをオンザフライで処理します。その結果、メソッドはメソッド結果にリストされませんmethods
。