Rails 中的模型命名空间问题

发布于 2024-12-28 05:40:02 字数 434 浏览 0 评论 0原文

我在 Rails 3.1 中遇到命名空间问题。我有一堂课,我们称之为a。

#/app/models/a.rb
class a
  #some methods
  def self.method_from_a
    #does things
  end
end

但我还有另一个在不同命名空间中具有相同名称的类。

#/app/models/b/a.rb
class b::a
  def method
    return a.method_from_a
  end
end

当我调用 b::a.method 时,我得到:

NameError: uninitialized constant b::a::a

我确信这是一个简单的解决方案,我只是想念它。

I am having an issue with namespaces in Rails 3.1. I have a class, let's call it a.

#/app/models/a.rb
class a
  #some methods
  def self.method_from_a
    #does things
  end
end

But I also have another class that has the same name in a different namespace.

#/app/models/b/a.rb
class b::a
  def method
    return a.method_from_a
  end
end

When I call b::a.method though I get:

NameError: uninitialized constant b::a::a

I am sure it is a simple solution, I am just missing it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遗弃M 2025-01-04 05:40:02

前缀 a::

class b::a
  def method
    return ::a.method_from_a
  end
end

这个(即作用域运算符)也有解释 此处

可以直接访问类或模块中定义的常量
类或模块内的任何位置。在类或模块之外,他们
可以使用作用域运算符 ::'' 进行访问,前缀为
返回适当的类或模块对象的表达式。
可以访问任何类或模块外部定义的常量
不加修饰或使用范围运算符
::'' 不带前缀。

顺便说一句,在 Ruby 中,类名应该以大写字母开头。

Prefix a with :::

class b::a
  def method
    return ::a.method_from_a
  end
end

This, (i.e. the scope operator) is also explained here:

Constants defined within a class or module may be accessed unadorned
anywhere within the class or module. Outside the class or module, they
may be accessed using the scope operator, ::'' prefixed by an
expression that returns the appropriate class or module object.
Constants defined outside any class or module may be accessed
unadorned or by using the scope operator
::'' with no prefix.

By the way, in Ruby class names should start with an upper case letter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文