ActiveSupport: Vũ khí bí mật của Rails
Ruby
118
White

Ngoc Dao viết ngày 22/03/2016

Sau khi cài Rails, bạn sẽ thấy một số thư viện sau được cài kèm theo (kiểm tra bằng lệnh gem list):

  • actionmailer
  • actionpack
  • actionview
  • activejob
  • activemodel
  • activerecord
  • activesupport

ActiveSupport (dưới đây gọi tắt là AS) là gì?

Theo quảng cáo:

Active Support is the Ruby on Rails component responsible for providing Ruby language extensions, utilities, and other transversal stuff.

It offers a richer bottom-line at the language level, targeted both at the development of Rails applications, and at the development of Ruby on Rails itself.

Có nghĩa AS là tập hợp các hàm tiện ích được Rails nhúng thẳng vào lớp của thư viện chuẩn của Ruby (như Array, String). Nhờ tính năng reopen của Ruby, việc nhúng này rất dễ dàng, mang lại cảm giác các hàm này có sẵn trong bản thân ngôn ngữ (vì thư viện chuẩn của ngôn ngữ nào cũng được coi là một phần của ngôn ngữ ấy).

Các tiện ích trong AS quá hay, đến nỗi nhiều người cứ tưởng các chúng là tính năng của Ruby, góp phần tạo nên triệu chứng biết Rails mà không biết Ruby!

Bạn nên lục lọi tài liệu của AS từ link ở trên, sẽ tìm thấy rất nhiều thứ thú vị. Để dùng các hàm này trong chương trình Ruby bình thường (không phải là Rails), chỉ cần require 'activesupport' một cách tường minh.

Ví dụ về một số hàm tiện ích

Dưới đây là vài ví dụ nhằm tạo hưng phấn để bạn có hứng lục lọi tài liệu ở trên. Để thử nghiệm các đoạn mã ví dụ, nên dùng irb, nhớ require 'activesupport' trước.

Chuyển danh từ sang số nhiều, số ít (String)

"post".pluralize             # => "posts"
"octopus".pluralize # => "octopi"
"sheep".pluralize # => "sheep"
"words".pluralize # => "words"
"the blue mailman".pluralize # => "the blue mailmen"

Tính số byte (Number)

2.6.megabytes  # => 2726297.6

Biến thành câu (Array)

%w[a b c].to_sentence                            # => "a, b, and c"
%w[a b c].to_sentence(:connector => '&') # => "a, b, & c"
%w[a b c].to_sentence(:skip_last_comma => true) # => "a, b and c"

blank? (Object)

# Thay vì viết (hay gặp trong view)
if !address.nil? && !address.empty?
# Viết ngắn được thành
if !address.blank?

attr_accessor_with_default

class Homework
# Đỡ phải viết initialize
attr_accessor_with_default :sucks, true
end

assignment = Homework.new
assignment.sucks # => true

cattr*, mattr*, class_inheritable_accessor

Chắc bạn đã quen với attr_accessor của Ruby. AS cung cấp thêm cattr_accessor để khai báo accessor cho lớp. cattr_accessor tạo ra một biến chung cho tất cả lớp cùng cây thừa kế, còn class_inheritable_accessor tạo biến riêng cho từng lớp.

class P1
cattr_accessor :val
end

class C1 < P1
end

P1.val # => nil
C1.val # => nil
P1.val = 8
C1.val # => 8

class P2
class_inheritable_accessor :val
end

class C2 < P2
end

P2.val # => nil
C2.val # => nil
P2.val = 8
C2.val # => nil

returning (Object)

Giúp mã sáng sủa hơn vì làm rõ giá trị trả về là gì. 2 đoạn mã sau, cái sau sáng sủa hơn vì cho biết hàm sẽ trả về cái gì.

def change_state(object_id, new_state)
object = find(object_id)
object.state = new_state
object.save
object
end

def change_state(object_id, new_state)
returning find(object_id) do |object|
object.state = new_state
object.save
end
end

Với returning, ban đầu ta khởi tạo đối tượng sẽ trả về, rồi sửa (modify) dần dần nó cho đến khi được cái ưng ý, y như tạc một bức tượng.

delegate

Tham khảo Định luật nữ thần Demeter.

Tham khảo

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
322 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
70 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 3 năm trước
70 8
White
43 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 3 năm trước
43 1
White
42 2
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 3 năm trước
42 2
Bài viết liên quan
White
9 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết gần 4 năm trước
9 6
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết 4 năm trước
8 1
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết hơn 4 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
322 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!