5 tip có thể bạn chưa biết trong ruby on rails
Đâ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 ...
Đâ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ẻ