Ruby on rails 你做什么?

Ruby on rails 你做什么?,ruby-on-rails,Ruby On Rails,我有一些我正在修改的继承代码。然而,我(对我)看到了一些奇怪的事情 我看到一些代码如下: ::User.find_by_email(params[:user][:email]).update_attributes(:mag => 1) 我从未见过这样的事情(我是RubyonRails新手)。这是做什么的?为什么我的用户。通过电子邮件(params[:User][:email])查找。更新属性(:mag=>1)不起作用?该错误表示有关用户常量的某些信息 如果有帮助的话,我正在使用Rails

我有一些我正在修改的继承代码。然而,我(对我)看到了一些奇怪的事情

我看到一些代码如下:

::User.find_by_email(params[:user][:email]).update_attributes(:mag => 1)
我从未见过这样的事情(我是RubyonRails新手)。这是做什么的?为什么我的
用户。通过电子邮件(params[:User][:email])查找。更新属性(:mag=>1)
不起作用?该错误表示有关
用户
常量的某些信息


如果有帮助的话,我正在使用Rails 2.3.5。

您可能会在这里找到线索:

它确保在全局名称空间中加载用户模型


假设在当前模块(Foo::User)中有一个全局用户模型和另一个用户模型。通过调用::User,您可以确保获得全局值。

是范围解析运算符,它实际上意味着“在命名空间中”,因此
ActiveRecord::Base
表示“
Base
,在
ActiveRecord
的命名空间中”

在任何名称空间之外解析的常量的含义与它听起来的完全相同-一个常量根本不在任何名称空间中

它用于代码可能不明确的地方:

module Document
  class Table # Represents a data table

    def setup
      Table # Refers to the Document::Table class
      ::Table # Refers to the furniture class
    end

  end
end

class Table # Represents furniture
end
Ruby使用(除其他外)词法范围来查找常量名称。例如,如果您有以下代码:

module Foo
  class Bar
  end

  def self.get_bar
    Bar.new
  end
end

class Bar
end
Foo.get\u bar
返回
Foo::bar
的实例。但是如果我们将
::
放在常量名称前面,它会迫使Ruby只在顶层查找常量。所以
::Bar
总是指顶级
Bar

在Ruby中,您将遇到这样的情况:代码的运行方式将迫使您使用这些“绝对”常量引用来访问所需的类。

运算符“::”用于访问模块内的类。这样,您还可以间接访问方法。例如:

module Mathematics
    class Adder
       def Adder.add(operand_one, operand_two)
           return operand_one + operand_two
       end
    end
end
您可以通过以下方式访问:

puts “2 + 3 = “ + Mathematics::Adder.add(2, 3).to_s

这解释了::的作用,但不是前面没有标识符的::的作用没错。我不使用Ruby,但是“::”操作符看起来是一个范围解析操作符。我猜“::User”simpy表示当前模块中的全局用户标识符。有人能证实吗?@Lennart:谢谢。我授予你a+1,因为你在我澄清之前得到了答案。另外,+1对Gareth的回答比我们的回答更清楚。