问题描述
我正在尝试了解cancancan
gem使用的Dataset
方法。
我尝试了here,但是找不到方法can?
:
根据建议here,我尝试了以下操作:
can?
我只是想找出can?.arity
NoMethodError: undefined method `can?' for main:Object
can?.parameters
NoMethodError: undefined method `can?' for main:Object
(视图中使用的cancancan方法)想要接收的参数,但是这个示例也是学习如何对其他方法执行此操作的好机会,因此,我希望有一种通用的解决方案(一种解决方案,使我可以查找有关此特定示例所要求的方法以外的方法的文档)。
提前感谢所有帮助/指针!
解决方法
作为使用外部站点的替代方法,您可以从命令行尝试ri
:
ri "can?"
在安装gem时,通常也会安装ri文档。 ri
命令行工具将在已安装的gem文档中搜索与您的输入相匹配的方法和常量,并显示它们。
由于它在本地运行,因此当您没有方便的Internet连接时,这可能是一个很好的资源!
,最简单的方法是在the site you linked的搜索栏中输入can?
,这将给出以下两个结果:
不是答案,而只是在另一个论坛中被告知的一些提示:
- 并非每个ruby gem方法都会有每种方法的文档,所以不要指望为每种gem找到每种方法的文档
- 尝试查找源代码(例如github),并在特定存储库中搜索以
def
开头的双引号的方法名称。那就是:
转到github存储库,然后转到搜索栏(左上方),然后进行搜索(并在搜索时选择“在此存储库中”)
这将提供these个搜索结果:
我们可以看到定义的方法here:
,Jörg的答案是正确的,但我也想展示一些替代方法来查找方法的源代码:
-
使用Pry gem中的
show-source
:show-source CanCan::Ability#can?
当然,要执行此操作,您需要知道该方法是在
CanCan::Ability
上定义的。要查找该信息,可以使用<my_record>.method(:own?).owner
。 -
在Ruby核心中使用
source-location
:您可以使用
<record>.method(:own?).source_location
-这将告诉您定义该方法的文件以及行号,因此您可以在文本编辑器中将其打开以进行检查