如何列出Ruby on Rails中scaffold生成的所有方法并查询方法来源?
如何列出Ruby on Rails中Scaffold生成的方法及查询关联方法来源
一、列出Scaffold生成的相关方法
Scaffold会生成基础的CRUD代码,但很多核心方法其实是Rails Active Record自带的,分模型层和控制器层两部分来看:
模型层(以User模型为例)
- Scaffold本身不会在模型文件里手动写大量方法,但会根据你指定的
admin:references生成关联配置,触发Rails动态生成关联方法:- 实例方法:
admin(获取关联的Admin对象)、admin=(设置关联的Admin对象)、build_admin(构建关联Admin对象)、create_admin(创建并关联Admin对象) - 加上Active Record自带的通用方法:
new、save、destroy、find、where等类/实例方法
- 实例方法:
- 查看方法的实用命令(在Rails控制台
rails c中执行):- 查看User模型的所有类方法:
User.methods.sort - 查看User实例的所有方法:
User.new.methods.sort - 只查看User模型自身定义的方法(排除继承的框架方法):
User.instance_methods(false)
- 查看User模型的所有类方法:
控制器层(UsersController)
Scaffold会直接生成标准RESTful动作方法:
index(列表页)、show(详情页)、new(新建页)、create(创建数据)、edit(编辑页)、update(更新数据)、destroy(删除数据)- 还有私有的辅助方法:
set_user(加载单个User实例)、user_params(参数白名单校验)
二、查询admin()方法的来源及定义位置
你在代码里用的@user.admin和@user.admin=,是因为Scaffold生成了belongs_to :admin关联配置后,Rails动态生成的方法:
- 触发源头:打开
app/models/user.rb,能看到belongs_to :admin这行代码,这就是告诉Rails要生成关联方法的配置。 - 定义位置:这些方法不是写在你的项目代码里的,而是Rails在运行时通过Active Record的关联机制动态注入的。你可以在Rails控制台里执行以下命令查看具体源码位置:
执行后会返回一个数组,第一个元素是Rails框架源码文件的路径,第二个是行号,比如会指向Active Record关联模块的源码文件。User.instance_method(:admin).source_location
内容的提问来源于stack exchange,提问作者cd4user
相关产品推荐
相关产品推荐

