如何列出特定对象可以访问的所有方法?
我有一个@current_user
对象,在应用程序控制器中定义:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
并且想看看我在视图文件中有哪些可用的方法.具体来说,我想看看:has_many
协会提供了什么方法.(我知道:has_many
should提供了什么,但我想核实一下.)
如何列出特定对象可以访问的所有方法?
我有一个@current_user
对象,在应用程序控制器中定义:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
并且想看看我在视图文件中有哪些可用的方法.具体来说,我想看看:has_many
协会提供了什么方法.(我知道:has_many
should提供了什么,但我想核实一下.)
下面将列出用户类所拥有的方法,而基本对象类所没有的方法...
>> 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
是用于类和类实例的方法.
以下是我的用户类中不在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.
注意,作为(many)的结果创建的方法有许多在用户类中定义的关系,在methods
调用的结果中是not.
Added注意:has_many不直接添加方法.相反,ActiveRecord机器使用Ruby method_missing
和responds_to
技术动态处理方法调用.因此,methods
方法结果中没有列出这些方法.