所以我的问题是我有两个同名的课程。
一个是REXML :: Document,它是第三方库。
另一个是由我的应用程序控制的名为“Document”的ActiveRecord模型。
在我的控制器中,当我执行“Document.transaction”时,他告诉我类“REXML :: Document”不存在方法“transaction”,但我真正想要的是使用我的模型。我的模型不属于模块,所以如何告诉ruby他应该查看模型“Document”而不是“REXML :: Document”?
答案 0 :(得分:1)
::Document
告诉Ruby在顶层开始名称查找而不是当前级别。
它类似于Unix路径名,/
也可以作为路径名组件分隔符和不使用相对查找的标志。
但是,如果您在控制器内,Document
本身应从不引用REXML::Document
。它应该总是只查找Document
,首先在当前命名空间中,然后向上一级,依此类推,直到顶级命名空间(实际上没什么特别的,它只是{ {1}}类)。
当然,除非你的代码中有Object
,否则在某种情况下,使用include REXML
会有更简单的补救措施:只是不要这样做。
答案 1 :(得分:0)
是的,我认为这个问题有很多重复。
答案是,无论如何,使用::Document
虽然我认为只需输入Document
就会优先Document
到REXML::Document