ruby-on-rails - rails : when to use self

标签 ruby-on-rails ruby syntax

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

这是我想完全理解的方法的代码。如果可能的话,我希望有一个替代这段代码的方法,这样事情就更清楚了。

def self.for(facebook_id)
  User.create_by_facebook_id(facebook_id)
end

最佳答案

self 引用当前对象。

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

class Foo
  def self.for(facebook_id)
    User.create_by_facebook_id(facebook_id)
  end
end

在类 Foo 中定义了一个类方法for。它被调用:

Foo.for(facebook_id)

您可以通过谷歌搜索类方法以了解更多信息。

可能是 Rails 的一部分或插件/gem 期望某些类将有一个类方法“用于”更多上下文在这方面会有所帮助。

方法在做什么

对于类方法来说很常见,它是创建一个类的实例。例如,ActiveRecord 类有一个类方法“create”,它试图创建一个已存储在数据库中的模型类的实例。因此 User.create 将返回已存储在数据库中的 User 类的实例。

在您的示例代码中,它调用了应用程序中用户类提供的类方法“create_by_facebook_id”。

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

添加:

顺便说一句,Ruby 方法的默认返回值是最后一条语句的值。因此,您的示例方法将返回根据提供的 facebook_id 新创建的用户实例。

关于ruby-on-rails - rails : when to use self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512908/

相关文章:

ruby - 使用 Nokogiri 验证 XML : finding the line-nr of validation errors?

ruby - 拒绝将信息存储在文件中

jquery - 为什么我看到 MS jQuery 示例使用 `$(domReady); ` ?

python - 我以前从未见过的语法错误

ruby-on-rails - Ruby one liner 替换大块代码

ruby-on-rails - 无法添加多个 image_tag

ruby-on-rails - 如何在不同于 3000 的端口中启动 WEBrick

ruby - 数组循环

objective-c - cocoa objective-c类中变量前面的下划线如何工作?

ruby-on-rails - 如何在Plupload上传后显示图片而不刷新页面?