Một số method cần lưu ý đối với lập trình viên Ruby on Rails
# String name = nil name.blank? # => true name = "" name.blank? # => true name = " " name.blank? # => true name = "Tom" name.blank? # => false # Array numbers = nil numbers.blank? # => true numbers = [] numbers.blank? # => true numbers = [1, 2, 3] numbers.blank? # => false # ...
# String name = nil name.blank? # => true name = "" name.blank? # => true name = " " name.blank? # => true name = "Tom" name.blank? # => false # Array numbers = nil numbers.blank? # => true numbers = [] numbers.blank? # => true numbers = [1, 2, 3] numbers.blank? # => false # Hash params = nil params.blank? # => true params = {} params.blank? # => true params = { name: "Tom", email: "hoge@hoge.com" } params.blank? # => false
present? thì ngược lại với blank?
# String name = "" name.present? # => false name = "Tom" name.present? # => true
if user.name.blank? name = "What's your name?" else name = user.name end
name = user.name.presence || "What's your name?" "".presence hoặc [].presence sẽ trả về nil.
name = "" puts name.presence || "What's your name?" # => What's your name?
Mệnh đề “string không có giá trị” thường không cần phân biệt nil và "". Khi sử dụng nil? thì lại cho 2 kết quả khác nhau.
if email.nil? # => nếu email là "" thì vẫn được coi là có nhập dữ liệu và không gọi puts puts "Please input email!" end
Đó cũng là lý do nên sử dụng blank? hơn.
if email.blank? # => Nếu email là "" hoặc " " thì xử lý như chưa nhập dữ liệu và gọi puts puts "Please input email!" end
Tương tự như thế, khi validates trong Model, nếu không có lý do đặc biệt thì nên sử dụng allow_blank: true, không nên sử dụng allow_nil: true.
if parent.children && parent.children.singleton? singleton = parent.children.first send_mail_to(singleton) end
# nếu children không nil thì children.singleton? được gọi như bình thường if parent.children.try(:singleton?) singleton = parent.children.first send_mail_to(singleton) end
Ruby cung cấp rất nhiều method hay và đơn giản để thao tác với array, nhưng khi cần thực hiện filter trong model của Rails, thì nên sử dụng query để tốc độ xử lý được nhanh hơn.
def admin_users User.all.select(&:admin?) end
def admin_users User.where(admin: true) end
pluck là method để lấy 1 column cho trước trong các record, mà không load toàn bộ các record đó. Vì thế mà tốc độ xử lý và RAM cũng hiệu quả hơn.
def admin_user_ids User.where(admin: true).map(&:id) end
def admin_user_ids User.where(admin: true).pluck(:id) end
"my_book".camelize # => "MyBook" "MyBook".underscore # => "my_book" "my_book".dasherize # => "my-book" "book".pluralize # => "books" "person".pluralize # => "people" "fish".pluralize # => "fish" "book_and_person".pluralize # => "book_and_people" "book and person".pluralize # => "book and people" "BookAndPerson".pluralize # => "BookAndPeople" "books".singularize # => "book" "people".singularize # => "person" "books_and_people".singularize # => "books_and_person" "books and people".singularize # => "books and person" "BooksAndPeople".singularize # => "BooksAndPerson" "my_books".humanize # => "My books" "my_books".titleize # => "My Books" "my_book".classify # => "MyBook" "my_books".classify # => "MyBook" "my_book".tableize # => "my_books" "MyBook".tableize # => "my_books"
" My books ".squish # => "My books"
Tóm lại: trên đây là một số hàm mình đã tham khảo được, bài tiếp theo mình sẽ tìm hiểu và chia sẽ nhiều hàm hơn nữa, mình xin cảm ơn.