+3

5 tips trên Ruby on rails có thể bạn chưa biết

Hash#dig

Có lẽ trong chúng ta ai cũng đã từng phải như thế này để check parameters

... if params[:user] && params[:user][:address] && params[:user][:address][:somewhere_deep]

Với dig, chỉ đơn giản thế này:

... if params.dig(:user, :address, :somewhere_deep)

Ngắn gọn hơn rất nhiều đúng không? 😃

Object#presence_in

Nó cho phép bạn thay thế các điều kiện với một phương thức gọi khi bạn không thực sự cần một kết quả boolean của phép kiểm tra, nhưng bản thân một đối tượng kiểm tra. Ví dụ:

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

Chúng ta có thể viết lại như thế này

params[:sort].presence_in(sort_options) || :by_date

Module#alias_attribute

Điều này rất hữu ích khi làm việc trên một dự án với cơ sở dữ liệu kế thừa. Với những bảng với các tên cột khó hiểu, hay dài dòng như SERNUM_0, ITMDES1_0 và các tên khác. Ở đây chúng đã ánh xạ bảng này với mô hình ActiveRecord và thay vì viết các truy vấn và phạm vi trên nó như WeirdTable.where (SERNUM_0: '123'), thì với alias_attribute nó không chỉ tạo getter và setter (cũng như một predicate method) mà cũng hoạt động trong các truy vấn, tương tự như như khi gọi tên cái attributes SERNUM_0, ITMDES1_0... đó :

alias_attribute :name, :ITMDES1_0
...
scope :by_name, -> (name) { where(name: name) }

Object#presence

Đây là một trong những phương thức rất phổ biến. Có khá nhiều giải thích trên ApiDock. Vì vậy, object.presence tương đương với:

object.present? ? object : nil

Module#delegate

Vẫn còn hiếm khi được sử dụng bởi hầu hết các developer vì một số lý do. Mục đích chính của method này là tạo 1 ánh xạ đến một attribute của 1 class khác.

class Profile < ApplicationRecord
  belongs_to :user
  delegate :email, to: :user
end
...
profile.email # equivalent to profile.user.email

Ở trên thì trong proflie chúng ta có thể gọi thẳng profile.email, email ở đây chính là email của user mà profile này belongs_to Hy vọng bạn thấy chúng hữu ích. Happy codding!

Nguồn: https://hackernoon.com/5-ruby-on-rails-tips-you-probably-dont-know-8b80b4a0890f


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí