Ruby on Rails 实体方法与类别方法

依据方法作用的对象不同,有分实体方法(instance method)及类别方法(class method),举个例子来说:

kitty = Cat.new("kitty", "female")
kitty.say_hello

这个 say_hello 是作用在 kitty 这个「实体」,所以称这个 say_hello 为实体方法。如果是这样:

class PostsController < ApplicationController
  def index
    @posts = Post.all    # 取得所有的 Post 资料
  end
end

这里的 all 方法是直接作用在 Post 这个「类别」上,故称之类别方法。在 Ruby 要定义类别方法有几种写法,其中一种比较简单的,就是在前面加上 self:

class Cat
  def self.all
  end
end

这样就可以直接用 Cat.all 的方式呼叫了。下面是另一种写法:

class Cat
  class << self
    def all
      # ...
    end
  end
end

这样的写法跟前面的一样,但这样就不需要特别在方法前面加上 self。当一个类别里面有很多类别方法的时候,我常会选择这样的写法。
[为你自己学Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html


<<:  Spring Framework X Kotlin Day 4 MVC

>>:  每个人都该学的30个Python技巧|技巧 9:快速建立数列—range函式(字幕、衬乐、练习)

[2020铁人赛] Day30 - .net core第一阶段结束,感谢IT邦!

完赛了,下次再出现决定要写进阶/实务上的内容,再分享给各位 :) 刚刚看完後觉得文章内容还可以再补...

[Day18] TS:理解 Omit 的实作

是我们今天要聊的内容,老样的,如果你已经可以轻松看懂,欢迎直接左转去看同事 Ken 精彩的文章 —...

css 圆角效果

今天来说如何在css中使用圆角的效果,我依旧使用昨天的粉色方块,在粉色方块的css中枢日以下程序码 ...

DOM 实作 换背景图

<!DOCTYPE html> <html lang="en"...

Day 16:专案03 - PTT 八卦版爬虫01 | cookie

偷看一下专案长怎样 我预期的专案想要完成这几件事: 取得八卦版每篇文章的标题、作者和发文时间。 取...