5 tips trên Ruby on rails có thể bạn chưa biết
Bài đăng này đã không được cập nhật trong 6 năm
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