Trầ*_* Dự 2 ruby ruby-on-rails
在 Ruby 中,我理解::ClassName在基本模块中调用类。例如,这是我的代码:
module HHT
module V1
module OfflineCheckIn
class PutOfflineCheckInProductsApi < ApplicationApi
put 'offline' do
ActiveRecord::Base.transaction do
OfflineCheckIn.create(check_in_param) # exception here
end
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行时,我遇到了异常:
NoMethodError(HHT::V1::OfflineCheckIn:Module 的未定义方法“创建”)
据我了解,Rails 了解OfflineCheckIn当前在 module 内部HHT::V1::OfflineCheckIn,所以我必须在 base class 调用::OfflineCheckIn。我不明白的是:在另一个控制器上,一些以前的程序员与我实现了相同的方式,但他不需要::在模型之前调用。
所以我的问题是:当我们不需要使用::before class 并且 rails 可以理解那是 base class 时?
谢谢
您必须调用类,::ClassName就像在您的层次结构中有一个具有相同名称的类/模块一样,以区分它们,例如:
class Foo; end
module Bar
class Foo; end # this is another Foo
def self.a
puts ::Foo == Foo
end
end
module FooBar
def self.a
puts ::Foo == Foo
end
end
Bar.a # => false
FooBar.a # => true
Run Code Online (Sandbox Code Playgroud)
这里我们有::Fooand ::Bar::Foo,但速记Foo指向其中之一,具体取决于上下文。
此外,实体是类还是模块也没有关系,两者都只是作为常量分配的值:
module Foo; end
module Bar
Foo = "a string"
def self.baz
puts Foo.class
end
end
puts Foo.class # => Module
Bar.baz # => String
Run Code Online (Sandbox Code Playgroud)