Cú pháp ngắn gọn với Ruby on Rails
Bài đăng này đã không được cập nhật trong 5 năm
Xin chào tất cả các bạn, Hôm nay mình sẽ chia sẻ một vài típ nhỏ trong Ruby mà có thể các bạn chưa biết, cũng có thể đã biết. Nhưng riêng đối với mình thì mình cảm thấy thật hay ho, có vài cái đã biết nhưng không dùng thường xuyên nên chúng dần đi vào quên lãng. Hôm rồi tình cờ nhớ lại nên chia sẽ luôn.
1. Hash#dig
Đa số chúng ta thường viết như thế này:
if params[:user] && params[:user][:address]
...
end
Nhìn vào thì có ai tưởng tượng đến &.
không?
Nhưng đối với các object Hash chúng ta có thể dùng dig
để viết lại như sau:
if params.dig :user, :address
...
end
2. Object#presence_in
Tiếp theo:
colors = [:red, :green, :blue]
color = colors.include?(params[:color]) ? params[:color] : :pink
#hoặc như thế này
color = (colors.include?(params[:color]) && params[:color]) || :pink
Nếu như vậy thì như thế này trông ngon lành hơn rất nhiều
params[:color].presence_in(colors) || :pink
3. Object#presence
Mình nhớ lúc trước toàn dùng presence
thôi, mà tự nhiên nay nhận ra về sau này toàn dùng cái cách cùi bắp khi mới vào nghề, không hiểu là vì sao lại cho nó vào một góc nữa
Thay vì như thế này:
object.present? ? object : nil
thì dùng như thế này nhé
object.presence
4. Module#delegate
Có rất nhiều bài nói về cách sử dụng delegate rồi, nhưng ở đây mình sẽ dùng ví dụ để thấy lợi ích của việc dùng delegate nhé
class User < ApplicationRecord
belongs_to :company
delegate :name, to: :company
end
...
user = User.first
user.name # thay vì phải viết user.company.name
5. Array#zip
Giả sử có 2 mảng cùng số phần tử, và muốn biến phần tử của mảng này thành key, còn phần tử mảng kia thành value tương ứng chúng ta làm như sau:
a = ["1", "2", "3"]
b = ["a", "b", "c"]
Hash[a.zip b] = {"1" => "a", "2" => "b", "3" => "c"}
6. Array#all? &:blank?
Kiểm tra array có chứa nil
hoặc ' '
không:
arr = ["a", "b", nil, ' ']
arr.all? &:blank? # => true
Cảm ơn các bạn đã dành thời gian để đọc. Thanks all ^.^
All rights reserved