我有两个模型,
User
Membership
两者之间存在如下关系
user has_many :memberships
我一直在尝试找出构建方法所在的位置,以及如何将它放入实例的方法列表中。这是显示我的 delima 的调试器的输出
(rdb:63) @user.memberships.respond_to?"build"
true
虽然以下返回 false,但它不应该返回 true 吗??
(rdb:63) @user.memberships.instance_methods.include?"build"
false
最佳答案
有一点是 instance_methods
有一个可选的 bool 参数,指示您是否要查看实例祖先的方法。在您的情况下,我认为您需要 instance_methods(true)
。
但是,根据 the documentation,“构建”似乎是一种自动生成的方法.通常,ActiveRecord 中自动生成的方法是通过覆盖 method_missing
和处理对实际上不存在的“方法”的调用来实现的。 responds_to
也被覆盖,这样该类将指示它响应正确的调用。但是,由于这些“方法”实际上并未定义,因此它们不会出现在 instance_methods
列表中。
由于类可以使用 method_missing
respond_to
的命令列表基本上是无限的,所以我很确定没有办法获取列表。例如,具有属性 a、b、c 和 d 的 ActiveRecord 模型将自动响应调用,如 find_by_a_and_b
和 find_by_a_b_and_c
和 find_by_b_and_d
等等,无穷无尽。无法获得所有这些可能性的列表。
关于ruby-on-rails - 列出对象响应的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651997/