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的回答比我们的回答更清楚。