Rails:何时使用self

fen*_*nec 3 ruby syntax ruby-on-rails

我正在开发一个Rails应用程序,并想了解何时使用self.for.

这是我想要完全理解的方法的代码.如果有可能,我希望有一个替代这个代码,这样可以使事情更清楚.

def self.for(facebook_id)
  User.create_by_facebook_id(facebook_id)
end
Run Code Online (Sandbox Code Playgroud)

Lar*_*y K 10

self指的是当前对象.

在类中,self用于定义类级方法.

class Foo
  def self.for(facebook_id)
    User.create_by_facebook_id(facebook_id)
  end
end
Run Code Online (Sandbox Code Playgroud)

定义了一类方法在类Foo.它被调用:

Foo.for(facebook_id)
Run Code Online (Sandbox Code Playgroud)

您可以谷歌获取课程方法以了解更多信息.

可能是Rails或插件/ gem的一部分期望某些类将具有"for"类方法.在这方面,更多上下文将是有帮助的.

该方法正在做什么

正如类方法所常见的那样,它正在创建一个类的实例.例如,ActiveRecord类有一个类方法"create",它尝试创建已存储在数据库中的模型类的实例.因此,User.create将返回已存储在数据库中的User类的实例.

在您的示例代码中,它调用由应用程序中的User类提供的类方法"create_by_facebook_id".

看起来像"for"方法被用于信息隐藏,因为它所做的只是进行另一个方法调用(到User.create_by_facebook)

添加:

顺便说一下,R​​uby方法的默认返回值是最后一个语句的值.因此,您的示例方法将返回从提供的facebook_id新创建的用户实例.