5 tip có thể bạn chưa biết trong ruby on rails
Bài đăng này đã không được cập nhật trong 6 năm
Đây là một bài viết được dịch lài từ 5 ruby on rails tips you probably dont know
Khi tôi làm việc với ruby on rails, tôi đã không thể ngừng tự hỏi tôi đã khám phá ra điều gì mới mẻ trong thế giới của Ruby. Và đây là cách nó hoạt động, bạn biết đấy, Ruby làm cho các developer happy và sau mỗi năm nó phải phát triển thêm các các công cụ mới giúp cho mã của bạn dễ hiểu hơn nhiều, nó làm code sạch hơn và người đọc cũng dễ hiểu hơn
Dưới đây là một số tip mà bạn sẽ hay thường xuyên sử dụng khi code ruby on rails và bạn sẽ hiểu được sự tiện lợi của nó như thế nào, xin mời trải nghiệm.
Hash#dig
Trong khoảng thời gian bạn làm việc với ruby, bạn đã bao giờ gặp phải trường hợp phải xử lý rất nhiều condition
với param
như dưới nè chưa
... if params[:user] && params[:user][:address] && params[:user][:address][:somewhere_deep]
vậy thay vì viết như trên chúng ta có thể viết gói gọn lại thành
... if params.dig(:user, :address, :somewhere_deep)
Object#presence_in
bình thường để kiểm tra một dữ liệu có tồn tại trong mảng hay không chúng ta thường hay sử dụng include?
, nhiều lúc cách sử dụng includes?
để check cũng mang lại nhiều bất tiện, ví dụ như dưới đây:
sort_options = [:by_date, :by_title, :by_author]
...
sort = sort_options.include?(params[:sort])
? params[:sort]
: :by_date
# Another option
sort = (sort_options.include?(params[:sort]) && params[:sort]) || :by_date
thay vào đó ta có thể sử dụng presence_in
thay thế
params[:sort].presence_in(sort_options) || :by_date
như vậy đơn giản hơn rất nhiều.
Module#alias_attribute
Khi trong table của chúng ta đã có các trường như SERNUM_0
hay ITMDES1_0
, và thay vì để tên nó giữ nguyên như vậy và sử dụng trực tiếp trong các Query như WeirdTable.where(SERNUM_0: ‘123’)
, chúng ta có thể sử dụng alias_attribute
để tiện lơi hơn trong cách sử dụng, nó khiến cho scope
dễ đọc, dễ hiểu hơn
alias_attribute :name, :ITMDES1_0
...
scope :by_name, -> (name) { where(name: name) }
Object#presence
chắc các bạn đã quá quen sử dụng với hàm duới đây
object.present? ? object : nil
Vậy giờ thay vì phải viết dài như vậy, chúng ta chỉ cần đơn giản sử dụng object.presence
.
Đơn giản hơn rất nhiều có phải không ^_^
Module#delegate
Cái nè thực sự hay, chắc cũng đã rất nhiều bạn dùng quen món nè, cho bạn nào chưa dùng bao giờ. bình thường khi ta có
class Profile < ApplicationRecord
belongs_to :user
end
và chúng ta muốn truy xuất email
từ profile
, chúng ta thường hay sử dụng lệnh profile.user.email
Bây giờ chúng ta có thể làm một cách đơn giản hơn bằng cách sử dụng delegate
như dưới đây:
class Profile < ApplicationRecord
belongs_to :user
delegate :email, to: :user
end
...
profile.email # equivalent to profile.user.email
Như vậy chúng ta chỉ cần đơn giản sử dụng profile.email
thay vì phải sử dụng profile.user.email
Kết Luận:
Trên đây là một vài tip hữu dụng giúp chúng ta có thể code hanh hơn,tiện hơn là happy hơn
Chúc các bạn vui vẻ
All rights reserved