列出对象response_to?的所有方法?

问题描述

| 我有两个模型,
User 
Membership
两者之间具有以下关系
user has_many :memberships
我一直在尝试找出build方法的位置,以及如何在实例的方法列表中获取它。这是显示我的delima的调试器的输出
(rdb:63) @user.memberships.respond_to?\"build\"
true
当以下内容返回false时,它是否应该返回true?
(rdb:63) @user.memberships.instance_methods.include?\"build\"
false
    

解决方法

有一点是,“ 4”带有一个可选的布尔参数,指示是否要查看实例祖先的方法。我想你要5英镑。 但是,根据文档,看来\“ build \”是自动生成的方法。通常,ActiveRecord中自动生成的方法是通过覆盖ѭ6并处理实际上不存在的对“方法”的调用来实现的。
responds_to
也被覆盖,因此该类将指示它响应正确的调用。但是,由于实际上未定义这些“方法”,因此它们不会出现在“ 4”列表中。 由于类可以使用
method_missing
can9ѭ的命令列表实际上是无限的,所以我很确定没有办法获得该列表。例如,具有属性a,b,c和d的ActiveRecord模型将自动响应诸如
find_by_a_and_b
find_by_a_b_and_c
find_by_b_and_d
等调用,并且是无限的。无法获得所有这些可能性的列表。     ,请注意,根据Ruby版本,“ 4”将返回字符串或符号数组。 Ruby 1.8返回一个字符串数组,Ruby 1.9返回一个符号数组。 在Ruby 1.8中
\"\".respond_to?(:upcase)
# => true 
\"\".class.instance_methods.include?(\"upcase\")
# => false
\"\".class.instance_methods.include?(:upcase)
# => false
在Ruby 1.9中
\"\".respond_to?(:upcase)
# => true 
\"\".class.instance_methods.include?(\"upcase\")
# => false
\"\".class.instance_methods.include?(:upcase)
# => true
同样,必须在类而不是实例上调用“ 4”。     ,您可以尝试:
@user = User.first

@user.methods.grep /method_name/
但是,我认为您不会在列表中看到\'build \'或\'create \'。这些方法很可能是动态生成的     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...