Ruby & Rails Tricks – Có Thể Bạn Chưa Biết ?
Xin chào mọi người !! Có thể các tricks này có người biết rồi hoặc sắp được biết nhưng mình cũng mạn phép được chia sẻ lại. Văn mình có thể không hay nhưng Ruby thì luôn đẹp Ruby 1. Có nhiều cách để call một lamda my_lambda = -> { puts <span ...
Xin chào mọi người !!
Có thể các tricks này có người biết rồi hoặc sắp được biết nhưng mình cũng mạn phép được chia sẻ lại. Văn mình có thể không hay nhưng Ruby thì luôn đẹp
Ruby
1. Có nhiều cách để call một lamda
1 2 3 4 5 6 7 8 |
my_lambda = -> { puts <span class="hljs-string">"welcome to summoner's rift"</span>} my_lambda.call my_lambda[] my_lambda.() my_lambda.=== |
2. Tạo một hash từ một list value
1 2 3 4 5 6 |
<span class="hljs-constant">Hash</span>[<span class="hljs-string">'key1'</span>, <span class="hljs-string">'value1'</span>, <span class="hljs-string">'key2'</span>, <span class="hljs-string">'value2'</span>] <span class="hljs-comment"># => {"key1"=>"value1", "key2"=>"value2"}</span> |
3 Tạo một pre-filled array
1 2 3 4 |
<span class="hljs-constant">Array</span>.new(<span class="hljs-number">10</span>) { rand <span class="hljs-number">300</span> } |
Kết quả ta sẽ có được một array với 10 số ngẫu nhiên.
4. Các object đặc biệt
Như các bạn đã biết trong ruby mọi thứ đề là object nên sẽ có object_id . Tuy nhiên một số đối tượng cá biệt có id cố định :
1 2 3 4 5 6 7 8 9 |
<span class="hljs-keyword">false</span>.object_id <span class="hljs-comment"># 0</span> <span class="hljs-keyword">true</span>.object_id <span class="hljs-comment"># 2</span> <span class="hljs-keyword">nil</span>.object_id <span class="hljs-comment"># 4</span> <span class="hljs-number">1</span>.object_id <span class="hljs-comment"># 3</span> <span class="hljs-number">2</span>.object_id <span class="hljs-comment"># 5</span> |
Các id của Fixnum sẽ tính theo công thức : (number * 2) + 1.
Maximum Fixnum là 1073741823, sau đó bạn sẽ có một Bignum object.
5. Convert bất kì giá trị nào sang kiểu boolean
1 2 3 4 5 |
!!(<span class="hljs-number">1</span>) <span class="hljs-comment"># true</span> !!(<span class="hljs-keyword">nil</span>) <span class="hljs-comment"># false</span> |
6. Kiểm tra tên của các method đang dùng
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="hljs-function"><span class="hljs-keyword">def</span> </span>foo bar <span class="hljs-keyword">end</span> <span class="hljs-function"><span class="hljs-keyword">def</span> </span>bar puts caller <span class="hljs-keyword">end</span> foo |
Kết quả sẽ là:
1 2 3 4 5 |
-:<span class="hljs-number">3</span>:<span class="hljs-keyword">in</span> <span class="hljs-string">'foo'</span> -:<span class="hljs-number">10</span>:<span class="hljs-keyword">in</span> <span class="hljs-string">'<main>'</span> |
Nếu bạn muốn biết tên của method hiện tại thì dùng __method__ hoặc __callee__
Rails
7. Xoá các space không cần thiết
1 2 3 4 |
<span class="hljs-string">" My
books "</span>.squish <span class="hljs-comment"># => "My books"</span> |
8. Dùng pluck thay vì map
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.
1 2 3 4 5 6 |
<span class="hljs-function"><span class="hljs-keyword">def</span> </span>admin_user_ids <span class="hljs-constant">User</span>.where(<span class="hljs-symbol">admin:</span> <span class="hljs-keyword">true</span>).map(&<span class="hljs-symbol">:id</span>) <span class="hljs-keyword">end</span> |
thành
1 2 3 4 5 6 |
<span class="hljs-function"><span class="hljs-keyword">def</span> </span>admin_user_ids <span class="hljs-constant">User</span>.where(<span class="hljs-symbol">admin:</span> <span class="hljs-keyword">true</span>).pluck(<span class="hljs-symbol">:id</span>) <span class="hljs-keyword">end</span> |
9. timezone trong Rails
Trong Rails, có 2 cách để setting timezone, cách 1 là setting trong application.rb, cách 2 là sử dụng timezone dựa theo biến số môi trường TZ. Nếu trong trường hợp setting giữa 2 cách này mâu thuẫn với nhau, sẽ nảy sinh ra những lỗi không thể dự đoán trước. Vì thế, tốt hơn là thống nhất chỉ sử dụng timezone trong application.rb.
Ví dụ, không dùng Date.today mà dùng Date.current, không dùng Time.now mà dùng Time.current( hoặc Time.zone.now)
10. Các method thay đổi string thành số nhiều, số ít, …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<span class="hljs-string">"my_book"</span>.camelize <span class="hljs-comment"># => "MyBook"</span> <span class="hljs-string">"MyBook"</span>.underscore <span class="hljs-comment"># => "my_book"</span> <span class="hljs-string">"my_book"</span>.dasherize <span class="hljs-comment"># => "my-book"</span> <span class="hljs-string">"book"</span>.pluralize <span class="hljs-comment"># => "books"</span> <span class="hljs-string">"person"</span>.pluralize <span class="hljs-comment"># => "people"</span> <span class="hljs-string">"fish"</span>.pluralize <span class="hljs-comment"># => "fish"</span> <span class="hljs-string">"book_and_person"</span>.pluralize <span class="hljs-comment"># => "book_and_people"</span> <span class="hljs-string">"book and person"</span>.pluralize <span class="hljs-comment"># => "book and people"</span> <span class="hljs-string">"BookAndPerson"</span>.pluralize <span class="hljs-comment"># => "BookAndPeople"</span> <span class="hljs-string">"books"</span>.singularize <span class="hljs-comment"># => "book"</span> <span class="hljs-string">"people"</span>.singularize <span class="hljs-comment"># => "person"</span> <span class="hljs-string">"books_and_people"</span>.singularize <span class="hljs-comment"># => "books_and_person"</span> <span class="hljs-string">"books and people"</span>.singularize <span class="hljs-comment"># => "books and person"</span> <span class="hljs-string">"BooksAndPeople"</span>.singularize <span class="hljs-comment"># => "BooksAndPerson"</span> <span class="hljs-string">"my_books"</span>.humanize <span class="hljs-comment"># => "My books"</span> <span class="hljs-string">"my_books"</span>.titleize <span class="hljs-comment"># => "My Books"</span> <span class="hljs-string">"my_book"</span>.classify <span class="hljs-comment"># => "MyBook"</span> <span class="hljs-string">"my_books"</span>.classify <span class="hljs-comment"># => "MyBook"</span> <span class="hljs-string">"my_book"</span>.tableize <span class="hljs-comment"># => "my_books"</span> <span class="hljs-string">"MyBook"</span>.tableize <span class="hljs-comment"># => "my_books"</span> |
11. Sử dụng Object.try(:method_name) thay vì kiểm tra nil
1 2 3 4 5 6 7 |
<span class="hljs-keyword">if</span> parent.children && parent.children.singleton
Có thể bạn quan tâm
0
|