我正在开发一个Rails应用程序,并想了解何时使用self.for
。Rails:何时使用自我
这是我想完全理解的方法的代码。如果可能的话,我希望有一个替代这个代码,这样会让事情变得更加清晰。
def self.for(facebook_id)
User.create_by_facebook_id(facebook_id)
end
我正在开发一个Rails应用程序,并想了解何时使用self.for
。Rails:何时使用自我
这是我想完全理解的方法的代码。如果可能的话,我希望有一个替代这个代码,这样会让事情变得更加清晰。
def self.for(facebook_id)
User.create_by_facebook_id(facebook_id)
end
自是指当前对象。
在一个类中,self用于定义类级方法。
class Foo
def self.for(facebook_id)
User.create_by_facebook_id(facebook_id)
end
end
在类Foo定义类方法。它被调用:
Foo.for(facebook_id)
你可以谷歌的类方法来了解更多。
这可能是Rails的一部分或插件/创业板期望有些类将有一个类方法“for”更多的上下文将在这方面有所帮助。
什么方法做
正如类方法常见的,它要创建一个类的实例。例如,ActiveRecord类有一个类方法“create”,它尝试创建已存储在数据库中的模型类的实例。因此,User.create将返回已存储在数据库中的User类的一个实例。
在您的示例代码中,它正在调用应用程序中User类提供的类方法“create_by_facebook_id”。
貌似“为”正被用于信息,因为所有它做的是另一种制作方法调用(以User.create_by_facebook)
新增隐藏方法:
顺便说一句,默认返回值来自Ruby的方法是最后一条语句的值。所以你的示例方法将返回从提供的facebook_id新创建的用户实例。
它看起来像我self.for只是一个用于创建一个用户的Facebook ID的别名。我觉得其实self.for应该是:
def self.for(facebook_id)
User.find_or_create_by_facebook_id(facebook_id)
end
它搜索与Facebook的ID的用户,如果没有找到一个,创建一个记录并返回它的方式。然后,self.for的意思是“返回用户这个Facebook的ID”。
简短回答:自我总是指当前对象。所以在实例方法中,self是实例,在类方法中,self是类,并且在类定义内(如您的示例中),self是类...
有关类方法的更多信息和您发布的代码片段,请参阅Larry K.的答案。
如果代码是一个名为Foo
类里面,那么可选的方案是:
def Foo.for(facebook_id)
User.create_by_facebook_id(facebook_id)
end
self
在这种情况下是必要的,如果你有,你希望能够使用一些通用类级别的方法跨多个班级。您可以使用self.
将它们添加到Module
中以对它们进行范围(因为您不知道它们将要参与的实际类的名称),然后将该模块作为类的一部分。
这不是特定于Rails的,所以我将它标记为这样。 – 2010-03-25 04:00:31