mirror of
https://github.com/jbranchaud/til
synced 2026-07-04 08:38:23 +00:00
47 lines
932 B
Markdown
47 lines
932 B
Markdown
# Define A Set Of Class Methods
|
|
|
|
The most common way to define class methods is by defining them directly with
|
|
`self` (the class in the current context) on a method by method basis:
|
|
|
|
```ruby
|
|
class User
|
|
def self.find_by(attrs)
|
|
# lookup logic ...
|
|
end
|
|
end
|
|
```
|
|
|
|
If you have a group of class methods you want to define, you can stick them all
|
|
within a `class << self` block which does similarly defines each of them as
|
|
singleton methods of that class (`User` in this case):
|
|
|
|
```ruby
|
|
class User
|
|
class << self
|
|
def find_by_email(email)
|
|
# lookup logic ...
|
|
end
|
|
|
|
def find_by_last_name(last_name)
|
|
# lookup logic ...
|
|
end
|
|
end
|
|
end
|
|
```
|
|
|
|
This opens the singleton class of `User` for modification, adding these two new
|
|
methods.
|
|
|
|
We can see those defined alongside all other direct and inherited class methods:
|
|
|
|
```ruby
|
|
> User.methods
|
|
=>
|
|
[:find_by_email,
|
|
:find_by_last_name,
|
|
:yaml_tag,
|
|
:allocate,
|
|
...
|
|
]
|
|
```
|