如何列出特定对象可以访问的所有方法?

我有一个@current_user对象,在应用程序控制器中定义:

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

并且想看看我在视图文件中有哪些可用的方法.具体来说,我想看看:has_many协会提供了什么方法.(我知道:has_manyshould提供了什么,但我想核实一下.)

推荐答案

下面将列出用户类所拥有的方法,而基本对象类所没有的方法...

>> 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_missingresponds_to技术动态处理方法调用.因此,methods方法结果中没有列出这些方法.

Ruby-on-rails相关问答推荐

使用turbo流的部分渲染在rails 7中不起作用.

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

为Rails服务器推荐的交付类型

关于关联 has_many 的多级/三重嵌套形式

从 rails 5 升级到 6 和 zeitwerk

未初始化的常量 ActionDispatch::Session::EncryptedCookieStore (NameError)

使用 RSpec 和 Capybara (Rails) 测试重定向

Rails - 使用 %W

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

不允许请求来源:使用 Rails5 和 ActionCable 时的 http://localhost:3001

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

Rails:将所有未知路由重定向到 root_url

如何从邮箱中获取域

如何在 Ruby 中生成随机日期?

参数错误:范围主体需要可调用

确认后如何进行设计重定向

ruby/ruby on rails 内存泄漏检测

如何在 Rails 中设置路由的默认格式?

ArgumentError:ApplicationController 的副本已从模块树中删除,但仍处于活动状态

Ruby 中的类别名