ruby-on-rails - 列出对象响应的所有方法?

标签 ruby-on-rails ruby

我有两个模型,

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_bfind_by_a_b_and_cfind_by_b_and_d等等,无穷无尽。无法获得所有这些可能性的列表。

关于ruby-on-rails - 列出对象响应的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651997/

相关文章:

ruby-on-rails - 如何解析服务器端(rails)中的复选框值?

ruby - 错误 : Installing vagrant gem in ruby 2. 0.0

ruby-on-rails - 设计注册 Controller 的未定义方法 `users_url'

ruby-on-rails - 使用 Deface 覆盖 Spree 管理员 View

ruby-on-rails - Gitlab CI 和 Rails Postgres 崩溃

ruby-on-rails - 如何使用 Sinatra 应用程序在 Heroku 中运行 cron 作业

ruby - Nix:用 Ruby 编译 Vim

ruby-on-rails - Rails 4.2 弃用警告 : `serialized_attributes` is deprecated without replacement,

ruby-on-rails - 为什么在测试时模拟数据?

ruby-on-rails - Rails ActiveAdmin - 编辑新的资源 View