1. ActiveRecord::Relation#pick
Trước Rails 6
Pluck được sử dụng để lấy ra một mảng của attribute value khi query, giúp giảm step loop qua từng phần tử trong mảng ActiveRecord
Pluck.first sẽ lấy ra phần tử đầu tiên của mảng.
1 2 3 4 5 6 7 | <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">limit</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">pluck</span><span class="token punctuation">(</span><span class="token symbol">:name</span><span class="token punctuation">)</span><span class="token punctuation">.</span>first <span class="token comment"># SELECT "users"."name" FROM "users" LIMIT ? [["LIMIT", 1]]</span> <span class="token comment"># => "David"</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">pluck</span><span class="token punctuation">(</span><span class="token symbol">:name</span><span class="token punctuation">)</span><span class="token punctuation">.</span>first <span class="token comment"># SELECT "users"."name" FROM "users" WHERE "users"."id" = $1</span> <span class="token comment"># => "David"</span> |
Rails 6
Pick được sử dụng thay Pluck.first với mục đích là lấy ra phần tử đầu tiên của mảng
1 2 3 4 5 6 7 8 | <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">pick</span><span class="token punctuation">(</span><span class="token symbol">:name</span><span class="token punctuation">)</span> <span class="token comment"># SELECT "users"."name" FROM "users" LIMIT ? [["LIMIT", 1]]</span> <span class="token comment"># => "David"</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>id<span class="token punctuation">:</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">pick</span><span class="token punctuation">(</span><span class="token symbol">:name</span><span class="token punctuation">,</span> <span class="token symbol">:city</span><span class="token punctuation">)</span> <span class="token comment"># SELECT "users"."name", "users"."city" FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 5], ["LIMIT", 1]]</span> <span class="token comment"># => ["Naiya", "Goa"]</span> |
2. ActiveRecord::Base.create_or_find_by/!
create_or_find_by rails 6 là method thay cho find_or_create_by khi nó thay đổi thứ tự từ select->insert thành insert->select để tránh race condition khi sử dụng find_or_create_by trong các ứng dụng cần high scale.
Nếu một bản ghi đã tồn tại với các ràng buộc duy nhất, sẽ đưa ra một ngoại lệ giống việc sử dụng find_by.
Giả sử có 2 bảng với ràng buộc như sau
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">class</span> <span class="token class-name">CreatePosts</span> <span class="token operator"><</span> <span class="token constant">ActiveRecord</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Migration</span><span class="token punctuation">[</span><span class="token number">6.0</span><span class="token punctuation">]</span> <span class="token keyword">def</span> change create_table <span class="token symbol">:posts</span> <span class="token keyword">do</span> <span class="token operator">|</span>t<span class="token operator">|</span> t<span class="token punctuation">.</span>string <span class="token symbol">:title</span><span class="token punctuation">,</span> index<span class="token punctuation">:</span> <span class="token punctuation">{</span> unique<span class="token punctuation">:</span> <span class="token keyword">true</span> <span class="token punctuation">}</span> t<span class="token punctuation">.</span>timestamps <span class="token keyword">end</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
1 2 3 4 | <span class="token keyword">class</span> <span class="token class-name">Post</span> <span class="token operator"><</span> <span class="token constant">ApplicationRecord</span> validates <span class="token symbol">:title</span><span class="token punctuation">,</span> presence<span class="token punctuation">:</span> <span class="token keyword">true</span> <span class="token keyword">end</span> |
Sử dụng create_or_find_by
Raise ngoại lệ với create_or_find_by!
3. Enum
Enum được sử dụng nhiều để đặt tên cho scope. Trong Rails 6 để đặt tên cho scope với ý nghĩa lấy ra phủ định ta có thể sử dụng not_*
1 2 3 4 5 6 7 8 | <span class="token keyword">class</span> <span class="token class-name">Feed</span> <span class="token operator"><</span> <span class="token constant">ActiveRecord</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Base</span> enum status<span class="token punctuation">:</span> <span class="token string">%i[ active pending trashed ]</span> <span class="token keyword">end</span> <span class="token constant">Feed</span><span class="token punctuation">.</span>not_active <span class="token comment"># => where.not(status: :active)</span> <span class="token constant">Feed</span><span class="token punctuation">.</span>not_pending <span class="token comment"># => where.not(status: :pending)</span> <span class="token constant">Feed</span><span class="token punctuation">.</span>not_trashed <span class="token comment"># => where.not(status: :trashed)</span> |
4. update_columns
update_columns trong Rails được sử dụng để update record mà bỏ qua các điều kiện (validate) của thuộc tính.
Rails 6 khi sử dụng update_columns cho thuộc tính không tồn tại sẽ raise lên lỗi ActiveModel::MissingAttributeError.
Ở các phiên bản rails 4 hay rails 5 thì trong trường hợp này sẽ raise lên lỗi ActiveRecord::StatementInvalid
1 2 3 4 5 6 7 8 9 | <span class="token comment"># Rails 6</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>first<span class="token punctuation">.</span><span class="token function">update_columns</span><span class="token punctuation">(</span>office_email<span class="token punctuation">:</span> <span class="token string">'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbb6b2af9bbcb6bab2b7f5b8b4b6">[email protected]</a>'</span><span class="token punctuation">)</span> <span class="token constant">SELECT</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token operator">*</span> <span class="token constant">FROM</span> <span class="token string">"users"</span> <span class="token constant">ORDER</span> <span class="token constant">BY</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token constant">ASC</span> <span class="token constant">LIMIT</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"LIMIT"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token constant">Traceback</span> <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">:</span> from <span class="token punctuation">(</span>irb<span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token number">1</span> <span class="token constant">ActiveModel</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">MissingAttributeError</span> <span class="token punctuation">(</span>can't write unknown attribute `office_email`<span class="token punctuation">)</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token comment"># Rails 5.2</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>first<span class="token punctuation">.</span><span class="token function">update_columns</span><span class="token punctuation">(</span>office_email<span class="token punctuation">:</span> <span class="token string">'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="234e4a5763444e424a4f0d404c4e">[email protected]</a>'</span><span class="token punctuation">)</span> <span class="token constant">SELECT</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token operator">*</span> <span class="token constant">FROM</span> <span class="token string">"users"</span> <span class="token constant">ORDER</span> <span class="token constant">BY</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token constant">ASC</span> <span class="token constant">LIMIT</span> $<span class="token number">1</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"LIMIT"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"office_email"</span> <span class="token operator">=</span> $<span class="token number">1</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> $<span class="token number">2</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"office_email"</span><span class="token punctuation">,</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e08d8994a0878d81898cce838f8d">[email protected]</a>"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"id"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token constant">Traceback</span> <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">:</span> from <span class="token punctuation">(</span>irb<span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token number">8</span> <span class="token constant">ActiveRecord</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">StatementInvalid</span> <span class="token punctuation">(</span><span class="token constant">PG</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">UndefinedColumn</span><span class="token punctuation">:</span> <span class="token constant">ERROR</span><span class="token punctuation">:</span> column <span class="token string">"office_email"</span> of relation <span class="token string">"users"</span> does <span class="token keyword">not</span> exist<span class="token punctuation">)</span> <span class="token constant">LINE</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"office_email"</span> <span class="token operator">=</span> $<span class="token number">1</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> $<span class="token number">2</span> <span class="token operator">^</span> <span class="token punctuation">:</span> <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"office_email"</span> <span class="token operator">=</span> $<span class="token number">1</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> $<span class="token number">2</span> |
5. delete_by and destroy_by
Rails có find_or_create_by, find_by và các phương thức tương tự để tìm giá trị đầu tiên và tạo nếu không tìm thấy bản ghi khớp với các tham số đã cho.
Rails bị thiếu tính năng tương tự để xóa/hủy một record phù hợp điều kiện, ở các bản Rails trước chỉ hỗ trợ phương thức destroy và delete_all để xóa tất cả các record.
1 2 3 4 5 6 7 | <span class="token constant">S</span>ử dụng destroy và delete_all để xóa toàn bộ bản ghi phù hợp điều kiện cho trước <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">find_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c2afabb682a5afa3abaeeca1adaf">[email protected]</a>"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>destroy <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c2125380c2b212d2520622f2321">[email protected]</a>"</span><span class="token punctuation">,</span> rating<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span>destroy_all <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">find_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d1bcb8a591b6bcb0b8bdffb2bebc">[email protected]</a>"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>delete <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d4b9bda094b3b9b5bdb8fab7bbb9">[email protected]</a>"</span><span class="token punctuation">,</span> rating<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">.</span>delete_all |
Rails 6 đã bổ sung việc xóa/hủy một record được tìm thấy với điều kiện cho trước với 2 phương thức là delete_by and destroy_by
1 2 3 4 | <span class="token constant">C</span>ú pháp<span class="token punctuation">:</span> model_name<span class="token punctuation">.</span><span class="token function">delete_by</span><span class="token punctuation">(</span>attr_name<span class="token punctuation">:</span> <span class="token string">'value'</span><span class="token punctuation">)</span> model_name<span class="token punctuation">.</span><span class="token function">destroy_by</span><span class="token punctuation">(</span>attr_name<span class="token punctuation">:</span> <span class="token string">'value'</span><span class="token punctuation">)</span> |
1 2 3 4 5 6 7 | <span class="token constant">S</span>ử dụng destroy_by và delete_by để xóa bản ghi phù hợp điều kiện cho trước <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">destroy_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="14797d60547379757d783a777b79">[email protected]</a>"</span><span class="token punctuation">)</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">destroy_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="54393d20143339353d387a373b39">[email protected]</a>"</span><span class="token punctuation">,</span> rating<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">)</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">delete_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3e53574a7e59535f5752105d5153">[email protected]</a>"</span><span class="token punctuation">)</span> <span class="token constant">User</span><span class="token punctuation">.</span><span class="token function">delete_by</span><span class="token punctuation">(</span>email<span class="token punctuation">:</span> <span class="token string">"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f39e9a87b3949e929a9fdd909c9e">[email protected]</a>"</span><span class="token punctuation">,</span> rating<span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">)</span> |
6. ActiveRecord::Relation#touch_all
Trong Rails, phương thức touch được sử dụng để update trường updated_at từ thời gian mặc định để current time. Không có validate và chỉ có các callback after_touch, after_commit, and after_rollback được thực hiện.
Rails 6 đã thêm phương thức touch_all trong ActiveRecord::Relation để touch vào nhiều bản ghi cùng một lúc.
Trước Rails 6, cần lặp lại trên tất cả các bản ghi bằng cách sử dụng một trình vòng lặp. Kết quả sẽ trả về một mảng ActiveRecords.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token comment"># Rails 5.2</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>count <span class="token constant">SELECT</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token constant">FROM</span> <span class="token string">"users"</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">3</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>all<span class="token punctuation">.</span>touch_all <span class="token operator">=</span><span class="token operator">></span> <span class="token constant">Traceback</span> <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">:</span> from <span class="token punctuation">(</span>irb<span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token number">2</span> <span class="token constant">NoMethodError</span> <span class="token punctuation">(</span>undefined method <span class="token string">'touch_all'</span> <span class="token keyword">for</span> <span class="token comment">#<User::ActiveRecord_Relation:0x00007fe6261f9c58>)</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>all<span class="token punctuation">.</span><span class="token keyword">each</span><span class="token punctuation">(</span><span class="token operator">&</span><span class="token symbol">:touch</span><span class="token punctuation">)</span> <span class="token constant">SELECT</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token operator">*</span> <span class="token constant">FROM</span> <span class="token string">"users"</span> <span class="token keyword">begin</span> transaction <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"updated_at"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"updated_at"</span><span class="token punctuation">,</span> <span class="token string">"2019-04-20 16:23:31.388028"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"id"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span> commit transaction <span class="token keyword">begin</span> transaction <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"updated_at"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"updated_at"</span><span class="token punctuation">,</span> <span class="token string">"2019-04-20 16:23:31.418028"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"id"</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">]</span> commit transaction <span class="token keyword">begin</span> transaction <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"updated_at"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token constant">WHERE</span> <span class="token string">"users"</span><span class="token punctuation">.</span><span class="token string">"id"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"updated_at"</span><span class="token punctuation">,</span> <span class="token string">"2019-04-20 16:23:31.518028"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"id"</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">]</span> commit transaction <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span><span class="token comment">#<User id: 1, name: "John", email: "<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="214b4e494f61464c40484d0f424e4c">[email protected]</a>", rating: 2, created_at: "2019-04-10 16:09:29", updated_at: "2019-04-20 16:23:31">, #<User id: 2, name: "Marry", email: "<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b4d9d5c6c6cdf4d3d9d5ddd89ad7dbd9">[email protected]</a>", rating: 4, created_at: "2019-04-10 16:09:43", updated_at: "2019-04-20 16:23:31">, #<User id: 3, name: "Poll", email: "<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f3839c9f9fb3949e929a9fdd909c9e">[email protected]</a>", rating: 4, created_at: "2019-04-10 16:09:45", updated_at: "2019-04-20 16:23:31">]</span> |
Với Rails 6 thì phương thức touch_all sẽ trả về số lượng của ActiveRecords
1 2 3 4 5 6 7 8 9 | <span class="token comment"># Rails 6</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>count <span class="token constant">SELECT</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token constant">FROM</span> <span class="token string">"users"</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">3</span> <span class="token operator">></span> <span class="token constant">User</span><span class="token punctuation">.</span>all<span class="token punctuation">.</span>touch_all <span class="token constant">UPDATE</span> <span class="token string">"users"</span> <span class="token constant">SET</span> <span class="token string">"updated_at"</span> <span class="token operator">=</span> <span class="token operator">?</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">"updated_at"</span><span class="token punctuation">,</span> <span class="token string">"2019-04-20 16:10:40.490507"</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">3</span> |
Ngoài ra, touch_all còn lấy custom_time hoặc tham số khác ở các cột như ở ví dụ dưới
1 2 3 | <span class="token constant">User</span><span class="token punctuation">.</span>all<span class="token punctuation">.</span><span class="token function">touch_all</span><span class="token punctuation">(</span>time<span class="token punctuation">:</span> <span class="token builtin">Time</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token number">2019</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token constant">User</span><span class="token punctuation">.</span>all<span class="token punctuation">.</span><span class="token function">touch_all</span><span class="token punctuation">(</span><span class="token symbol">:created_at</span><span class="token punctuation">)</span> |
Cảm ơn các bạn đã theo dõi đến đây!!!
Nguồn tham khảo:
https://www.botreetechnologies.com/blog/notable-activerecord-changes-in-rails-6-part-1
https://www.botreetechnologies.com/blog/notable-activerecord-changes-in-rails-6-part-2