如何找到Rails 4中定义的控制器方法?

use*_*363 1 ruby-on-rails ruby-on-rails-4

如何在Rails 4中找到为控制器定义的控制器方法?我环顾四周,Rails.application找到定义的命名路由,但不是定义的方法.

mar*_*ets 5

如果要列出特定控制器内定义的所有方法(即.UsersController):

>> UsersController.instance_methods(false)
=> [:new, :create, :edit, :update, :update_remote, :user_params]
Run Code Online (Sandbox Code Playgroud)

如果你只想要public方法:

>> UsersController.public_instance_methods(false)
=> [:new, :create, :edit, :update, :update_remote]
Run Code Online (Sandbox Code Playgroud)

如果您需要整个方法列表,也需要来自祖先的方法,请使用true(或不使用参数,因为它是默认值)调用这些方法:

  • UsersController.instance_methods
  • UsersController.public_instance_methods

更多文档:http://ruby-doc.org//core-2.2.0/Module.html#method-i-instance_methods

instance_methods

返回一个数组,其中包含接收器中公共和受保护实例方法的名称.对于模块,这些是公共和受保护的方法; 对于一个类,它们是实例(而不是单例)方法.如果可选参数为false,则不包括任何祖先的方法.

public_instance_methods

返回定义的公共实例方法的列表.如果可选参数为false,则不包括任何祖先的方法.


或者,如果您需要获取"本地"方法,包括其他模块中包含的方法,您可以通过以下方式实现:

u = UsersController.new
u.methods - u.class.superclass.instance_methods
Run Code Online (Sandbox Code Playgroud)