如何解决列出对象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 \'。这些方法很可能是动态生成的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。