Ruby là một ngôn ngữ hướng đối tượng. Mọi thứ trong Ruby đều là đối tượng. Điều này có nghĩa là tất cả các lớp khác bao gồm Array, Fixnum và String đang kế thừa tất cả các phương thức từ Object, thậm chí bản thân class cũng là một object kế thừa từ class Class, chúng ta sẽ xem các phương thức được xác định trước giúp chúng ta lập trình như thế nào nhé.
Phương thức .first
và .last
Thay vì truy cập một mảng bằng cách nhớ vị trí, chúng ta có thể sử dụng .first
để truy cập phần tử đầu tiên và .last
để truy cập phần tử cuối cùng của mảng. Hình dưới in ra kết quả của giá trị ở vị trí đầu tiên và cuối cùng của mảng.
Đối với Model / ActiveRecord
id | firstname | lastname | age | gender |
---|---|---|---|---|
1 | Andrew | Hui | 22 | m |
2 | Christine | Lee | 31 | f |
3 | Matthew | Nguyen | 22 | m |
User.first
=> #<User id: 1, firstname: "Andrew", lastname: "Hui", age: "22", gender:"m", created_at: "2019-04-15 09:04:31">
User.last
=> #<User id: 3, firstname: "Matthrew", lastname: "Nguyen", age: "22", gender:"m", created_at: "2019-04-15 09:04:32">
Phương thức .include?
Chúng ta thường sử dụng vòng lặp để kiểm tra xem một giá trị có trong mảng hay không, hãy dùng.include?
cho việc đó.
Phương thức .to_s
.to_s
là phương thức sẽ chuyển đổi bất kỳ đối tượng nào thành chuỗi. Nó thường được sử dụng khi bạn biến số nguyên thành chuỗi, +
có thể được sử dụng để thêm hai số hoặc kết hợp hai chuỗi.
123.to_s + 456.to_s
=> "123456"
Đối với Model / ActiveRecord
user = User.first
puts "This is #{user} information"
=> "This is #<User:0x007fefb2002428> information"
Phương thức .inspect
.inspect
sẽ trả về một chuỗi mô tả các phần tử của mảng nằm trong cặp dấu [],
bạn có thể kiểm tra định nghĩa trên APIDock
[ 1, 2, 3..4, 'five' ].inspect
=> "[1, 2, 3..4, \"five\"]"
Time.new.inspect
=> "2008-03-08 19:43:39 +0900"
Đối với Model / ActiveRecord
user = User.first
puts "This is #{user.inspect} information"
=> This is #<User id: 1, email: "[email protected]", encrypted_password: "$2a$10$D57y73Q9HUXG9Hym3bLl8.MizOdTRxd6NQH6snHi4Q....", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: "2014-10-15 11:19:09", sign_in_count: 13, current_sign_in_at: "2014-10-21 20:10:18", last_sign_in_at: "2014-10-20 17:37:27", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2014-06-30 17:41:06", updated_at: "2014-10-21 20:10:18"> information"
Phương thức .pluck
.pluck
là một phương thức lấy các thuộc tính trong database kèm theo điều kiện. Các giá trị trả về sẽ là chuỗi (theo mặc định). Chúng ta xét bảng users dưới đây.
id | firstname | lastname | age | gender |
---|---|---|---|---|
1 | Andrew | Hui | 22 | m |
2 | Christine | Lee | 31 | f |
3 | Matthew | Nguyen | 22 | m |
Để lấy danh sách firstname từ bảng users.
User.pluck(:firstname)
=> [‘Andrew’, ‘Christine’, Matthew’]
Để lấy danh sách firstname, lastname từ bảng users.
User.pluck(:lastname, :firstname)
=> [[‘Hui’, ‘Andrew’], [‘Lee’ ,‘Christine’], [‘Nguyen’, Matthew’]]
Chúng ta cũng có thể dùng kết hợp với SQL DISTINCT
.
User.pluck(‘DISTINCT age’)
=> [‘22’, ‘31’]
Phương thức.gsub
.gsub
có thể thay thế một từ trong chuỗi, dưới đây là một số cách dùng.
"Nothing will work unless you do".gsub('o', '0')
=> "N0thing will w0rk unless y0u d0"
Kết hợp sử dụng với Regex
"hello".gsub(/[aeiou]/, '*') #=> "h*ll*"
"hello".gsub(/([aeiou])/, '<\1>') #=> "h<e>ll<o>"
"hello".gsub(/./) {|s| s.ord.to_s + ' '} #=> "104 101 108 108 111 "
"hello".gsub(/(?<foo>[aeiou])/, '{\k<foo>}') #=> "h{e}ll{o}"
'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*') #=> "h3ll*"
Phương thức.all
.all
là bí danh của find(:all), dùng để lấy tất cả hàng trong bảng của cơ sở dữ liệu.
id | firstname | lastname | age | gender |
---|---|---|---|---|
1 | Andrew | Hui | 22 | m |
2 | Christine | Lee | 31 | f |
3 | Matthew | Nguyen | 22 | m |
Gía sử chúng ta muốn lấy tất cả thuộc tính trong bảng users.
User.all
=> [[‘1’, ‘Andrew’, ‘Hui’, ‘22’, ‘m’], [‘2’, ‘Christine’, ‘Lee’ , ‘31’, ‘f’], [‘3’, Matthew’, ‘Nguyen’, 22, ‘m’]].
Phương thức .joins
.joins
là một phương thức nối bảng trong database dựa trên khóa tham chiếu hoặc khóa ngoại.
Ví dụ: Ta có 2 bảng users và bảng comments
id | firstname | lastname | age | gender |
---|---|---|---|---|
1 | Andrew | Hui | 22 | m |
2 | Christine | Lee | 31 | f |
3 | Matthew | Nguyen | 22 | m |
Bảng comments chứa khóa ngoại: user_id
.
id | title | body | user_id |
---|---|---|---|
1 | Great! | sample body 1 | 1 |
2 | Love it! | sample body 2 | 1 |
3 | Never get it | sample body 3 | 2 |
Để join comments
và users
thông qua khóa ngoại user_id
: ta dùng câu lệnh dưới đây:
Comment.joins(:user)
=> [[‘Great!’, ‘sample body 1’, ‘1’, ‘1’, ‘Andrew’, ‘Hui’, ‘22’, ‘m’], [‘Love it!’, ‘sample body 2’, ‘1’, ‘2’, ‘Christine’, ‘Lee’ , ‘31’, ‘f’], [‘Great!’, ‘sample body 3’, ‘2’, ‘Christine’, ‘Lee’ , ‘31’, ‘f’]]
# Tương đương với câu lệnh SQL: SELECT * FROM Comments, Users WHERE Comments.user_id = Users.id
Tham khảo: https://apidock.com