如何区分“Class”类和“Module :: Class”?

时间:2010-11-09 12:30:46

标签: ruby-on-rails ruby activerecord

所以我的问题是我有两个同名的课程。

一个是REXML :: Document,它是第三方库。

另一个是由我的应用程序控制的名为“Document”的ActiveRecord模型。

在我的控制器中,当我执行“Document.transaction”时,他告诉我类“REXML :: Document”不存在方法“transaction”,但我真正想要的是使用我的模型。我的模型不属于模块,所以如何告诉ruby他应该查看模型“Document”而不是“REXML :: Document”?

2 个答案:

答案 0 :(得分:1)

::Document告诉Ruby在顶层开始名称查找而不是当前级别。

它类似于Unix路径名,/也可以作为路径名组件分隔符和不使用相对查找的标志。

但是,如果您在控制器内,Document本身应从不引用REXML::Document。它应该总是只查找Document,首先在当前命名空间中,然后向上一级,依此类推,直到顶级命名空间(实际上没什么特别的,它只是{ {1}}类)。

当然,除非你的代码中有Object,否则在某种情况下,使用include REXML会有更简单的补救措施:只是不要这样做。

答案 1 :(得分:0)

是的,我认为这个问题有很多重复。 答案是,无论如何,使用::Document虽然我认为只需输入Document就会优先DocumentREXML::Document