{"id":9163,"date":"2023-02-28T21:51:19","date_gmt":"2023-02-28T18:21:19","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/"},"modified":"2023-02-28T21:51:19","modified_gmt":"2023-02-28T18:21:19","slug":"whats-new-in-rails-71-4alb","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/","title":{"rendered":"\u0645\u0648\u0627\u0631\u062f \u062c\u062f\u06cc\u062f \u062f\u0631 Rails 7.1"},"content":{"rendered":"<div data-article-id=\"1382677\" id=\"article-body\">\n<p>Rails 7 \u0646\u0633\u062e\u0647 \u062e\u0648\u0634\u0627\u06cc\u0646\u062f\u06cc \u0628\u0648\u062f \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0634\u062a.  \u062f\u0631 \u0628\u0627\u0637\u0646\u060c Rails 7 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0648 Zeitwerk \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f.  \u0638\u0627\u0647\u0631 Hotwire \u0628\u0647 \u0631\u0627\u0647 \u062d\u0644 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f Rails \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f.<\/p>\n<p>Rails 7.1 \u0628\u0647 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a\u060c \u0645\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0631\u062e\u06cc \u0627\u0632 \u0627\u0636\u0627\u0641\u0627\u062a \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u06a9\u0647 \u0627\u062d\u062a\u0645\u0627\u0644\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f \u0635\u062d\u0628\u062a \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%DB%8C%DA%A9_API_%D8%AC%D8%AF%DB%8C%D8%AF_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%D9%87%D8%A7%DB%8C_Async_%D8%AF%D8%B1_Rails\" >\u06cc\u06a9 API \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u0647\u0627\u06cc Async \u062f\u0631 Rails<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%A8%D8%A7%D8%B2%D9%86%D8%B4%D8%A7%D9%86%DB%8C_%D8%A7%D9%86%D8%AC%D9%85%D9%86_%D9%87%D8%A7%DB%8C_%D9%85%D9%81%D8%B1%D8%AF\" >\u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u0627\u0646\u062c\u0645\u0646 \u0647\u0627\u06cc \u0645\u0641\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%BA%DB%8C%D8%B1%D9%81%D8%B9%D8%A7%D9%84_%DA%A9%D8%B1%D8%AF%D9%86_%D8%B1%D9%88%D8%B4_%D9%87%D8%A7%DB%8C_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_ActiveRecordenum\" >\u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 ActiveRecord#enum<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%D8%A7%D8%B2_%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA_%D8%AC%D8%AF%D9%88%D9%84_%D9%85%D8%B4%D8%AA%D8%B1%DA%A9\" >\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0639\u0628\u0627\u0631\u0627\u062a \u062c\u062f\u0648\u0644 \u0645\u0634\u062a\u0631\u06a9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%D8%A7%D8%B2_Async_Bulk_Record_Destruction\" >\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 Async Bulk Record Destruction<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%D8%B1%D8%B3%D8%A7%D9%86%DB%8C_%D9%87%D8%A7%DB%8C_%D8%AF%DB%8C%DA%AF%D8%B1_Rails_71\" >\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 Rails 7.1<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#ActiveRecord_Relationexplain_%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%87%D8%A7_%D8%B1%D8%A7_%D9%85%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D8%AF\" >ActiveRecord::Relation#explain  \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%B1%DA%A9%D9%88%D8%B1%D8%AF_%D9%81%D8%B9%D8%A7%D9%84_regroup\" >\u0631\u06a9\u0648\u0631\u062f \u0641\u0639\u0627\u0644 regroup<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%AC%D8%AF%DB%8C%D8%AF_stub_const_method_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4\" >\u062c\u062f\u06cc\u062f stub_const method \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%DA%86%D8%A7%D9%84%D8%B4_%D8%B1%D9%85%D8%B2_%D8%B9%D8%A8%D9%88%D8%B1_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_has_secure_password\" >\u0686\u0627\u0644\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 has_secure_password<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B6%D9%85%DB%8C%D9%85%D9%87_%D9%87%D8%A7_%D8%A8%D8%B1%DA%AF%D8%B1%D8%AF%D8%A7%D9%86%D8%AF%D9%86_%D9%84%DA%A9%D9%87\" >\u0630\u062e\u06cc\u0631\u0647 \u0636\u0645\u06cc\u0645\u0647 \u0647\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0644\u06a9\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%AA%D9%88%DA%A9%D9%86_%D9%87%D8%A7%DB%8C_CSRF_%D8%AF%D8%B1_%D8%AE%D8%A7%D8%B1%D8%AC_%D8%A7%D8%B2_%D8%AC%D9%84%D8%B3%D8%A7%D8%AA\" >\u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u062a\u0648\u06a9\u0646 \u0647\u0627\u06cc CSRF \u062f\u0631 \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0644\u0633\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B4%D8%A7%D8%AE%D8%B5_%D9%87%D8%A7%DB%8C_PostgreSQL\" >\u0628\u0631\u0631\u0633\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0628\u0631\u0627\u06cc \u0634\u0627\u062e\u0635 \u0647\u0627\u06cc PostgreSQL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#ActiveRecord_QueryMethodsselect_%D9%87%D8%B4_%D8%B1%D8%A7_%D9%85%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D8%AF\" >ActiveRecord::QueryMethods#select  \u0647\u0634 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF_%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87_%D9%87%D8%A7_%D8%A8%D8%A7_%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF_%DA%A9%D8%A7%D8%B1%DA%AF%D8%B1%D8%A7%D9%86_Puma_%D9%85%D8%B7%D8%A7%D8%A8%D9%82%D8%AA_%D8%AF%D8%A7%D8%B1%D8%AF\" >\u062a\u0639\u062f\u0627\u062f \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u0647\u0627 \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 Puma \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#preload_%D9%88_eager_load_%D8%A7%D9%86%D8%AC%D9%85%D9%86%E2%80%8C%D9%87%D8%A7%DB%8C%DB%8C_%DA%A9%D9%87_%D8%A8%D8%A7%DB%8C%D8%AF_%D9%86%D8%A7%D9%85%D8%AD%D8%B3%D9%88%D8%B3_%D8%A8%D8%A7%D8%B4%D9%86%D8%AF\" >preload  \u0648 eager_load \u0627\u0646\u062c\u0645\u0646\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0646\u0627\u0645\u062d\u0633\u0648\u0633 \u0628\u0627\u0634\u0646\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#Dockerfiles_%D9%BE%DB%8C%D8%B4%E2%80%8C%D9%81%D8%B1%D8%B6_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_New_Rails\" >Dockerfiles \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc New Rails<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D8%B3%D9%84%D8%A7%D9%85%D8%AA_%D9%BE%DB%8C%D8%B4_%D9%81%D8%B1%D8%B6\" >\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0633\u0644\u0627\u0645\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%AC%D8%AF%DB%8C%D8%AF_Railsenvlocal_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7%DB%8C\" >\u062c\u062f\u06cc\u062f Rails.env.local? \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%AC%D8%AF%DB%8C%D8%AF_ActiveRecord_Persistenceupdate_attribute_%D8%B1%D9%88%D8%B4\" >\u062c\u062f\u06cc\u062f ActiveRecord::Persistence#update_attribute! \u0631\u0648\u0634<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%A7%D9%84%DA%AF%D9%88%D9%87%D8%A7%DB%8C%DB%8C_%DA%A9%D9%87_%D9%82%D8%A7%D8%AF%D8%B1_%D8%A8%D9%87_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%AD%D9%84%DB%8C_%D9%87%D8%A7%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D9%81%D8%AA%D9%87_%D8%B4%D8%AF%D9%87_%D9%87%D8%B3%D8%AA%D9%86%D8%AF\" >\u0627\u0644\u06af\u0648\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0642\u0627\u062f\u0631 \u0628\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0645\u062d\u0644\u06cc \u0647\u0627\u06cc \u067e\u0630\u06cc\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0647\u0633\u062a\u0646\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/nabfollower.com\/blog\/whats-new-in-rails-71-4alb\/#%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\" >\u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DB%8C%DA%A9_API_%D8%AC%D8%AF%DB%8C%D8%AF_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%D9%87%D8%A7%DB%8C_Async_%D8%AF%D8%B1_Rails\"><\/span>\n<p>  \u06cc\u06a9 API \u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u0647\u0627\u06cc Async \u062f\u0631 Rails<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u062a\u06a9\u06cc\u0647 \u0628\u0631 \u0648\u06cc\u0698\u06af\u06cc \u0642\u0628\u0644\u06cc Rails 7\u060c Rails 7.1 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u0627\u0632 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0645\u06a9\u0646 \u0645\u06cc \u06a9\u0646\u062f.  \u0631\u06cc\u0644 7 \u0645\u0639\u0631\u0641\u06cc \u0634\u062f <code>ActiveRecord::Relation#load_async<\/code>\u060c \u06a9\u0647 \u06cc\u06a9 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062e\u0632\u0646 \u0631\u0634\u062a\u0647 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0632\u0645\u0627\u0646 \u0628\u0646\u062f\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0647 \u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 <code>Post.where(published: true).load_async<\/code>.<\/p>\n<p>\u062f\u0631 Rails 7.1\u060c \u0645\u0627 \u0642\u0627\u062f\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0648\u062f \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0631\u0634\u062a\u0647 \u0647\u0627\u06cc \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645.  \u0645\u062a\u062f\u0647\u0627\u06cc \u0627\u0646\u0628\u0648\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0647\u0645\u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f.  \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0648 \u06cc\u0627 \u0686\u0646\u062f \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0645\u0633\u062a\u0642\u0644 \u0631\u0627 \u0631\u0648\u06cc \u06cc\u06a9 \u06a9\u0627\u0631 \u06cc\u0627 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0634\u0648\u062f\u060c \u0646\u062a\u0627\u06cc\u062c \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u0631\u06cc\u0639\u062a\u0631 \u0628\u0627\u0632\u06af\u0631\u062f\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0639\u0645\u0644 \u06a9\u0646\u062f\u060c \u062f\u0648 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0627\u0631\u0632\u0634 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0627\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">active_record<\/span><span class=\"p\">.<\/span><span class=\"nf\">async_query_executor<\/span>\n<span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nf\">active_record<\/span><span class=\"p\">.<\/span><span class=\"nf\">global_executor_concurrency<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0632 \u062c\u0645\u0644\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u062f\u0631 Rails 7.1 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632 <code>async_sum<\/code>\u060c <code>async_pluck<\/code>\u060c \u0648 <code>async_count_by_sql<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%A7%D8%B2%D9%86%D8%B4%D8%A7%D9%86%DB%8C_%D8%A7%D9%86%D8%AC%D9%85%D9%86_%D9%87%D8%A7%DB%8C_%D9%85%D9%81%D8%B1%D8%AF\"><\/span>\n<p>  \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u0627\u0646\u062c\u0645\u0646 \u0647\u0627\u06cc \u0645\u0641\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Rails 7.1 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u062f\u0631 \u0627\u0646\u062c\u0645\u0646 \u0647\u0627\u06cc \u0645\u0646\u0641\u0631\u062f \u062a\u0646\u0638\u06cc\u0645 \u0645\u062c\u062f\u062f \u06a9\u0646\u06cc\u062f.  \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u0641\u0642\u0637 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0634 \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f <code>has_many<\/code> \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u06a9\u0644\u0627\u0633\u06cc \u0645\u0627\u0646\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">class<\/span> <span class=\"nc\">Teacher<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActiveRecord<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span>\n  <span class=\"n\">has_many<\/span> <span class=\"ss\">:students<\/span>\n  <span class=\"n\">has_one<\/span> <span class=\"ss\">:classroom<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"n\">teacher<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Teacher<\/span><span class=\"p\">.<\/span><span class=\"nf\">first<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0641\u0642\u0637 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u0645 <code>teacher.students.reset<\/code> \u0628\u0631\u0627\u06cc \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0646\u062a\u0627\u06cc\u062c \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 <code>teacher.students<\/code>.  \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0627\u06cc\u062f \u0645\u062c\u062f\u062f\u0627\u064b \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u0646\u062a\u0627\u06cc\u062c \u062c\u062f\u06cc\u062f \u062f\u0631 \u0635\u0648\u0631\u062a\u06cc \u06a9\u0647 \u0628\u0631\u062e\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u06a9\u0647\u0646\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0628\u0627 Rails 7.1\u060c \u0645\u0627 \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <code>reset<\/code> \u0631\u0648\u0634 \u0628\u0631 \u0631\u0648\u06cc \u0627\u0644\u0641 <code>has_one<\/code> \u0627\u062a\u062d\u0627\u062f\u06cc\u0647.  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0645\u062b\u0627\u0644 \u0628\u0627\u0644\u0627\u060c Rails 7.1 \u0628\u0647 \u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f <code>teacher.classroom.reset_teacher<\/code> \u0628\u0631\u0627\u06cc \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 <code>teacher<\/code> \u0648 <code>classroom<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%BA%DB%8C%D8%B1%D9%81%D8%B9%D8%A7%D9%84_%DA%A9%D8%B1%D8%AF%D9%86_%D8%B1%D9%88%D8%B4_%D9%87%D8%A7%DB%8C_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_ActiveRecordenum\"><\/span>\n<p>  \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 <code>ActiveRecord#enum<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><code>ActiveRecord#enum<\/code>  \u0627\u06af\u0631 \u06cc\u06a9 Rails enum \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f\u060c \u062f\u0633\u062a\u0647 \u0627\u06cc \u0627\u0632 \u0631\u0648\u0634 \u0647\u0627 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.  Rails 7.1 \u06af\u0632\u06cc\u0646\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u0635\u0631\u0627\u0641 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">class<\/span> <span class=\"nc\">Payment<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActiveRecord<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span>\n  <span class=\"n\">enum<\/span> <span class=\"ss\">:status<\/span><span class=\"p\">,<\/span> <span class=\"sx\">%i[succeeded failed]<\/span><span class=\"p\">,<\/span> <span class=\"ss\">instance_methods: <\/span><span class=\"kp\">false<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u06cc\u0644 \u0647\u0627 \u0631\u0648\u0634 \u0647\u0627\u06cc \u06a9\u0645\u06a9\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc \u06a9\u0646\u0646\u062f <code>instance_methods: false<\/code>.  \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u0645\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">payment<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Payment<\/span><span class=\"p\">.<\/span><span class=\"nf\">first<\/span>\n\n<span class=\"n\">payment<\/span><span class=\"p\">.<\/span><span class=\"nf\">succeeded?<\/span>\n<span class=\"n\">payment<\/span><span class=\"p\">.<\/span><span class=\"nf\">failed?<\/span>\n\n<span class=\"n\">payment<\/span><span class=\"p\">.<\/span><span class=\"nf\">succeeded!<\/span>\n<span class=\"n\">payment<\/span><span class=\"p\">.<\/span><span class=\"nf\">failed!<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%D8%A7%D8%B2_%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA_%D8%AC%D8%AF%D9%88%D9%84_%D9%85%D8%B4%D8%AA%D8%B1%DA%A9\"><\/span>\n<p>  \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0639\u0628\u0627\u0631\u0627\u062a \u062c\u062f\u0648\u0644 \u0645\u0634\u062a\u0631\u06a9<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Rails 7.1 \u062f\u0627\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u062f\u0627\u062e\u0644\u06cc \u0627\u0632 Common Table Expressions (CTEs) \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.  \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u06a9\u062f \u0645\u062e\u062a\u0635\u0631\u062a\u0631 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0645\u0647\u0645\u062a\u0631 \u0627\u0632 \u0622\u0646\u060c \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0646\u06cc\u0633\u062a <code>Arel::Nodes<\/code> \u0628\u0631\u0627\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647<\/p>\n<p>\u0628\u0627 Rails 7.1\u060c \u0645\u0627 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a <code>.with<\/code> \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc\u06cc \u0645\u0634\u0627\u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">with<\/span><span class=\"p\">(<\/span>\n  <span class=\"ss\">posts_with_comments: <\/span><span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">where<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"comments_count &gt; ?\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">),<\/span>\n  <span class=\"ss\">posts_with_tags: <\/span><span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">where<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"tags_count &gt; ?\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%D8%A7%D8%B2_Async_Bulk_Record_Destruction\"><\/span>\n<p>  \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 Async Bulk Record Destruction<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u06af\u0641\u062a\u0647 \u0634\u062f\u060c Rails 7.1 \u0631\u0627\u0647 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0627\u0641\u0632\u0648\u062f\u0647 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f\u0647\u0627\u06cc \u0647\u0645\u06af\u0627\u0645\u060c \u0627\u06cc\u0646 \u0627\u0633\u062a <code>destroy_association_async_batch_size<\/code> \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062c\u062f\u06cc\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc Rails \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 \u062a\u0639\u062f\u0627\u062f \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc\u06cc \u0631\u0627 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0646\u0646\u062f \u06a9\u0647 \u062f\u0631 \u06cc\u06a9 \u06a9\u0627\u0631 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0645\u0646\u0641\u0631\u062f \u062a\u0648\u0633\u0637 <code>dependent: :destroy_async<\/code> \u0627\u062a\u062d\u0627\u062f\u06cc\u0647.<\/p>\n<p>\u0631\u0641\u062a\u0627\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636\u060c \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062a\u0645\u0627\u0645 \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u062f\u0631 \u06cc\u06a9 \u06a9\u0627\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0631\u06a9\u0648\u0631\u062f \u0648\u0627\u0644\u062f \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0631\u0648\u062f\u060c \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0631\u0648\u062f\u060c \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0627\u0646\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06af\u0631 \u062a\u0639\u062f\u0627\u062f \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0627\u0632 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062c\u062f\u06cc\u062f \u0628\u06cc\u0634\u062a\u0631 \u0634\u0648\u062f\u060c \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u06a9\u0627\u0631 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0627\u0632 \u0628\u06cc\u0646 \u062e\u0648\u0627\u0647\u0646\u062f \u0631\u0641\u062a.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%D8%B1%D8%B3%D8%A7%D9%86%DB%8C_%D9%87%D8%A7%DB%8C_%D8%AF%DB%8C%DA%AF%D8%B1_Rails_71\"><\/span>\n<p>  \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 Rails 7.1<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"ActiveRecord_Relationexplain_%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%87%D8%A7_%D8%B1%D8%A7_%D9%85%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D8%AF\"><\/span>\n<p>  <code>ActiveRecord::Relation#explain<\/code>  \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails 7.1 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u0639\u0628\u0648\u0631 \u062f\u0647\u06cc\u062f <code>EXPLAIN<\/code> \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0628\u0647 <code>ActiveRecord::Relation#explain<\/code>.  \u06cc\u06a9 \u06a9\u0648\u0626\u0631\u06cc \u0645\u062b\u0627\u0644 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"no\">Customer<\/span><span class=\"p\">.<\/span><span class=\"nf\">where<\/span><span class=\"p\">(<\/span><span class=\"ss\">id: <\/span><span class=\"mi\">1<\/span><span class=\"p\">).<\/span><span class=\"nf\">joins<\/span><span class=\"p\">(<\/span><span class=\"ss\">:orders<\/span><span class=\"p\">).<\/span><span class=\"nf\">explain<\/span><span class=\"p\">(<\/span><span class=\"ss\">:analyze<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:verbose<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B1%DA%A9%D9%88%D8%B1%D8%AF_%D9%81%D8%B9%D8%A7%D9%84_regroup\"><\/span>\n<p>  \u0631\u06a9\u0648\u0631\u062f \u0641\u0639\u0627\u0644 <code>regroup<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Active Record \u0627\u0645\u06a9\u0627\u0646 &#8220;\u06af\u0631\u0648\u0647 \u0628\u0646\u062f\u06cc \u0645\u062c\u062f\u062f&#8221; \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627 \u0631\u0627 \u0628\u0627 \u06cc\u06a9 \u062c\u062f\u06cc\u062f \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f <code>regroup<\/code> \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0646 \u0637\u0631\u06cc\u0642 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f: <code>Post.group(:title).regroup(:author)<\/code>.  \u0627\u06cc\u0646 \u0645\u0639\u0627\u062f\u0644 SQL \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f <code>SELECT posts.* FROM posts GROUP BY posts.author<\/code>.<\/p>\n<p>\u0647\u0645\u06cc\u0646 \u0627\u0645\u0631 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0646\u0633\u062e\u0647 \u0647\u0627\u06cc \u0641\u0639\u0644\u06cc Rails \u0628\u0627 \u06a9\u062f \u062f\u0642\u06cc\u0642 \u062a\u0631 \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code> <span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">group<\/span><span class=\"p\">(<\/span><span class=\"ss\">:title<\/span><span class=\"p\">)<\/span><span class=\"o\">..<\/span><span class=\"n\">unscope<\/span><span class=\"p\">(<\/span><span class=\"ss\">:group<\/span><span class=\"p\">).<\/span><span class=\"nf\">group<\/span><span class=\"p\">(<\/span><span class=\"ss\">:author<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AC%D8%AF%DB%8C%D8%AF_stub_const_method_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4\"><\/span>\n<p>  \u062c\u062f\u06cc\u062f <code>stub_const method<\/code> \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06cc\u06a9 \u062c\u062f\u06cc\u062f <code>stub_const<\/code> \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc <code>ActiveSupport::TestCase<\/code> \u0627\u0636\u0627\u0641\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f \u06a9\u0647 \u062e\u0631\u062f \u0628\u0631\u0627\u06cc \u0645\u062f\u062a \u06cc\u06a9 \u0628\u0627\u0632\u062f\u0647 \u062b\u0627\u0628\u062a \u0627\u0633\u062a.<\/p>\n<p>\u0645\u062b\u0644\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"c1\"># World::List::Import::LARGE_IMPORT_THRESHOLD = 5000<\/span>\n\n<span class=\"n\">stub_const<\/span><span class=\"p\">(<\/span><span class=\"no\">World<\/span><span class=\"o\">::<\/span><span class=\"no\">List<\/span><span class=\"o\">::<\/span><span class=\"no\">Import<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:LARGE_IMPORT_THRESHOLD<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\n  <span class=\"n\">assert_equal<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"no\">World<\/span><span class=\"o\">::<\/span><span class=\"no\">List<\/span><span class=\"o\">::<\/span><span class=\"no\">Import<\/span><span class=\"o\">::<\/span><span class=\"no\">LARGE_IMPORT_THRESHOLD<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"n\">assert_equal<\/span> <span class=\"mi\">5000<\/span><span class=\"p\">,<\/span> <span class=\"no\">World<\/span><span class=\"o\">::<\/span><span class=\"no\">List<\/span><span class=\"o\">::<\/span><span class=\"no\">Import<\/span><span class=\"o\">::<\/span><span class=\"no\">LARGE_IMPORT_THRESHOLD<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">5000<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062b\u0627\u0628\u062a \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u062b\u0627\u0628\u062a \u0628\u0631 \u0645\u0642\u062f\u0627\u0631 \u0622\u0646 \u062f\u0631 \u062a\u0645\u0627\u0645 \u0631\u0634\u062a\u0647\u200c\u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0686\u0646\u062f \u0631\u0634\u062a\u0647\u200c\u0627\u06cc \u062a\u0623\u062b\u06cc\u0631 \u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u062f.  \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u06af\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0631\u0634\u062a\u0647 \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0647 \u06cc\u06a9 \u062b\u0627\u0628\u062a \u062a\u06a9\u06cc\u0647 \u06a9\u0646\u0646\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062a\u0636\u0627\u062f \u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u062a\u0636\u0627\u062f \u0627\u06cc\u062c\u0627\u062f \u0634\u0648\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%86%D8%A7%D9%84%D8%B4_%D8%B1%D9%85%D8%B2_%D8%B9%D8%A8%D9%88%D8%B1_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_has_secure_password\"><\/span>\n<p>  \u0686\u0627\u0644\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>has_secure_password<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails 7.1 \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u062e\u0634\u06cc\u062f\u0647 \u0627\u0633\u062a <code>has_secure_password<\/code> \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 a <code>password_challenge<\/code> \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0645\u0631\u0628\u0648\u0637\u0647  \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0627\u0644\u0641 <code>password_challenge<\/code> \u0628\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f <code>password_digest<\/code>.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0686\u0627\u0644\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0633\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.  \u0627\u06cc\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0645\u0646\u0637\u0642 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627 \u0631\u0627 \u062f\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0648 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0647 \u062c\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0627\u0632 \u0645\u0646\u0637\u0642 \u0645\u0648\u062c\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u0627\u06cc\u06cc\u062f \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">password_params<\/span> <span class=\"o\">=<\/span> <span class=\"n\">params<\/span><span class=\"p\">.<\/span><span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"ss\">:password<\/span><span class=\"p\">).<\/span><span class=\"nf\">permit<\/span><span class=\"p\">(<\/span>\n  <span class=\"ss\">:password_challenge<\/span><span class=\"p\">,<\/span>\n  <span class=\"ss\">:password<\/span><span class=\"p\">,<\/span>\n  <span class=\"ss\">:password_confirmation<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">).<\/span><span class=\"nf\">with_defaults<\/span><span class=\"p\">(<\/span><span class=\"ss\">password_challenge: <\/span><span class=\"s2\">\"\"<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"n\">current_user<\/span><span class=\"p\">.<\/span><span class=\"nf\">update<\/span><span class=\"p\">(<\/span><span class=\"n\">password_params<\/span><span class=\"p\">)<\/span>\n  <span class=\"c1\"># perform some work<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B6%D9%85%DB%8C%D9%85%D9%87_%D9%87%D8%A7_%D8%A8%D8%B1%DA%AF%D8%B1%D8%AF%D8%A7%D9%86%D8%AF%D9%86_%D9%84%DA%A9%D9%87\"><\/span>\n<p>  \u0630\u062e\u06cc\u0631\u0647 \u0636\u0645\u06cc\u0645\u0647 \u0647\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0644\u06a9\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 Rails 7.1\u060c \u0648\u0642\u062a\u06cc \u067e\u06cc\u0648\u0633\u062a\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0631\u06a9\u0648\u0631\u062f \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c <code>attach<\/code> \u0631\u0648\u0634 \u062d\u0628\u0627\u0628 \u06cc\u0627 \u062d\u0628\u0627\u0628 \u0647\u0627\u06cc \u067e\u06cc\u0648\u0633\u062a \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.  \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc blob \u0631\u0627 \u062f\u0631 \u067e\u06cc\u0648\u0633\u062a \u0645\u06cc\u200c\u062f\u0647\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06af\u0631 \u0631\u06a9\u0648\u0631\u062f \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u0648\u062f\u060c <code>attach<\/code> \u0628\u0631 \u062e\u0648\u0627\u0647\u062f \u06af\u0634\u062a <code>false<\/code>.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f \u0622\u0646 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"vi\">@user<\/span> <span class=\"o\">=<\/span> <span class=\"no\">User<\/span><span class=\"p\">.<\/span><span class=\"nf\">create!<\/span><span class=\"p\">(<\/span><span class=\"ss\">name: <\/span><span class=\"s2\">\"Josh\"<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">avatar<\/span> <span class=\"o\">=<\/span> <span class=\"vi\">@user<\/span><span class=\"p\">.<\/span><span class=\"nf\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nf\">attach<\/span><span class=\"p\">(<\/span><span class=\"n\">params<\/span><span class=\"p\">[<\/span><span class=\"ss\">:avatar<\/span><span class=\"p\">])<\/span>\n\n<span class=\"c1\"># You can now directly call blob methods as follows:<\/span>\n<span class=\"n\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nf\">download<\/span>\n<span class=\"n\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nf\">url<\/span>\n<span class=\"n\">avatar<\/span><span class=\"p\">.<\/span><span class=\"nf\">variant<\/span><span class=\"p\">(<\/span><span class=\"ss\">:thumb<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%AA%D9%88%DA%A9%D9%86_%D9%87%D8%A7%DB%8C_CSRF_%D8%AF%D8%B1_%D8%AE%D8%A7%D8%B1%D8%AC_%D8%A7%D8%B2_%D8%AC%D9%84%D8%B3%D8%A7%D8%AA\"><\/span>\n<p>  \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u062a\u0648\u06a9\u0646 \u0647\u0627\u06cc CSRF \u062f\u0631 \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0644\u0633\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails \u06cc\u06a9 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u062e\u0631\u0627\u062c \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 \u062c\u0644\u0633\u0647 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06cc\u06a9 \u062a\u0648\u06a9\u0646 CSRF \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062c\u0644\u0633\u0627\u062a \u062f\u0631 \u06a9\u0648\u06a9\u06cc\u200c\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647 \u0627\u0645\u06a9\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u0648\u06a9\u0646 CSRF \u062f\u0631 \u06cc\u06a9 \u0645\u06a9\u0627\u0646 \u0633\u0641\u0627\u0631\u0634\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0630\u062e\u06cc\u0631\u0647 \u062a\u0648\u06a9\u0646 \u0647\u0627\u06cc CSRF \u0631\u0627 \u062f\u0631 \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0644\u0633\u0627\u062a \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u0648\u06a9\u0646 \u0647\u0627\u06cc CSRF \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">class<\/span> <span class=\"nc\">CustomStore<\/span>\n  <span class=\"k\">def<\/span> <span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">)<\/span>\n    <span class=\"c1\"># Return the token from a custom location<\/span>\n  <span class=\"k\">end<\/span>\n\n  <span class=\"k\">def<\/span> <span class=\"nf\">store<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">,<\/span> <span class=\"n\">csrf_token<\/span><span class=\"p\">)<\/span>\n    <span class=\"c1\"># Store the token in a custom location<\/span>\n  <span class=\"k\">end<\/span>\n\n  <span class=\"k\">def<\/span> <span class=\"nf\">reset<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">)<\/span>\n    <span class=\"c1\"># Delete the stored session token<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">ApplicationController<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActionController<\/span><span class=\"ss\">:x:Base<\/span>\n  <span class=\"n\">protect_from_forgery<\/span> <span class=\"ss\">store: <\/span><span class=\"no\">CustomStore<\/span><span class=\"p\">.<\/span><span class=\"nf\">new<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B4%D8%A7%D8%AE%D8%B5_%D9%87%D8%A7%DB%8C_PostgreSQL\"><\/span>\n<p>  \u0628\u0631\u0631\u0633\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0628\u0631\u0627\u06cc \u0634\u0627\u062e\u0635 \u0647\u0627\u06cc PostgreSQL<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0627\u06cc\u0647 \u0647\u0627 \u0645\u0637\u0627\u0628\u0642 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u0646\u062c\u0631 \u0628\u0647 \u06cc\u06a9 \u0646\u0645\u0627\u06cc\u0647 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">add_index<\/span> <span class=\"ss\">:account<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:active<\/span><span class=\"p\">,<\/span> <span class=\"ss\">algorithm: :concurrently<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 Rails 7.1\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0634\u0627\u062e\u0635 \u0631\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">connection<\/span><span class=\"p\">.<\/span><span class=\"nf\">index_exists?<\/span><span class=\"p\">(<\/span><span class=\"ss\">:users<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:email<\/span><span class=\"p\">,<\/span> <span class=\"ss\">valid: <\/span><span class=\"kp\">true<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">connection<\/span><span class=\"p\">.<\/span><span class=\"nf\">indexes<\/span><span class=\"p\">(<\/span><span class=\"ss\">:users<\/span><span class=\"p\">).<\/span><span class=\"nf\">select<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"ss\">:valid?<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"ActiveRecord_QueryMethodsselect_%D9%87%D8%B4_%D8%B1%D8%A7_%D9%85%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D8%AF\"><\/span>\n<p>  <code>ActiveRecord::QueryMethods#select<\/code>  \u0647\u0634 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><code>ActiveRecord::QueryMethods#select<\/code>  \u062f\u0631 Rails 7.1 \u0627\u06a9\u0646\u0648\u0646 \u0647\u0634 \u0627\u0632 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627 \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f.  \u0627\u06cc\u0646 \u0628\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"c1\"># You can now write selects like this:<\/span>\n<span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">joins<\/span><span class=\"p\">(<\/span><span class=\"ss\">:comments<\/span><span class=\"p\">).<\/span><span class=\"nf\">select<\/span><span class=\"p\">(<\/span>\n  <span class=\"ss\">posts: <\/span><span class=\"p\">{<\/span> <span class=\"ss\">id: :post_id<\/span><span class=\"p\">,<\/span> <span class=\"ss\">title: :post_title<\/span> <span class=\"p\">},<\/span>\n  <span class=\"ss\">comments: <\/span><span class=\"p\">{<\/span> <span class=\"ss\">id: :comment_id<\/span><span class=\"p\">,<\/span> <span class=\"ss\">body: :comment_body<\/span><span class=\"p\">}<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"c1\"># In place of this:<\/span>\n<span class=\"no\">Post<\/span><span class=\"p\">.<\/span><span class=\"nf\">joins<\/span><span class=\"p\">(<\/span><span class=\"ss\">:comments<\/span><span class=\"p\">).<\/span><span class=\"nf\">select<\/span><span class=\"p\">(<\/span>\n  <span class=\"s2\">\"posts.id as post_id, posts.title as post_title,\n  comments.id as comment_id, comments.body as comment_body\"<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF_%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87_%D9%87%D8%A7_%D8%A8%D8%A7_%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF_%DA%A9%D8%A7%D8%B1%DA%AF%D8%B1%D8%A7%D9%86_Puma_%D9%85%D8%B7%D8%A7%D8%A8%D9%82%D8%AA_%D8%AF%D8%A7%D8%B1%D8%AF\"><\/span>\n<p>  \u062a\u0639\u062f\u0627\u062f \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u0647\u0627 \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 Puma \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0647\u200c\u0637\u0648\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636\u060c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc Rails \u06a9\u0647 \u062c\u062f\u06cc\u062f\u0627\u064b \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647\u200c\u0627\u0646\u062f\u060c \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 Puma \u062f\u0627\u0631\u0646\u062f \u06a9\u0647 \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u06cc\u0632\u06cc\u06a9\u06cc \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u062d\u062f\u0648\u062f \u0645\u06cc\u200c\u0634\u0648\u062f.  \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0631\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 <code>puma.rb<\/code> \u0641\u0627\u06cc\u0644.<\/p>\n<p>\u0631\u0627 <code>puma.rb<\/code> \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f Rails \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">if<\/span> <span class=\"no\">ENV<\/span><span class=\"p\">[<\/span><span class=\"s2\">\"RAILS_ENV\"<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"production\"<\/span>\n  <span class=\"n\">worker_count<\/span> <span class=\"o\">=<\/span> <span class=\"no\">ENV<\/span><span class=\"p\">.<\/span><span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"WEB_CONCURRENCY\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"no\">Concurrent<\/span><span class=\"p\">.<\/span><span class=\"nf\">physical_processor_count<\/span> <span class=\"p\">}<\/span>\n  <span class=\"n\">workers<\/span> <span class=\"n\">worker_count<\/span> <span class=\"k\">if<\/span> <span class=\"n\">worker_count<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">1<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"preload_%D9%88_eager_load_%D8%A7%D9%86%D8%AC%D9%85%D9%86%E2%80%8C%D9%87%D8%A7%DB%8C%DB%8C_%DA%A9%D9%87_%D8%A8%D8%A7%DB%8C%D8%AF_%D9%86%D8%A7%D9%85%D8%AD%D8%B3%D9%88%D8%B3_%D8%A8%D8%A7%D8%B4%D9%86%D8%AF\"><\/span>\n<p>  <code>preload<\/code>  \u0648 <code>eager_load<\/code> \u0627\u0646\u062c\u0645\u0646\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0646\u0627\u0645\u062d\u0633\u0648\u0633 \u0628\u0627\u0634\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails 7.1 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0627\u0631\u062a\u0628\u0627\u0637 \u0647\u0627\u06cc \u0627\u0632 \u067e\u06cc\u0634 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0648 \u0645\u0634\u062a\u0627\u0642 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u0645\u0634\u0627\u0628\u0647 \u0628\u0627 Active Record \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f. <code>includes<\/code>\u060c <code>select<\/code>\u060c \u0648 <code>joins<\/code> \u0631\u0648\u0634 \u0647\u0627 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0645\u06a9\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u0627\u0628\u0639 \u0627\u0646\u0628\u0648\u0647 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f <code>has_many<\/code> \u0627\u0646\u062c\u0645\u0646\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0634\u062f\u0647\u200c\u0627\u0646\u062f <code>eager_load<\/code> \u06cc\u0627 <code>preload<\/code> \u062f\u0631 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f<\/p>\n<p>\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"n\">query<\/span><span class=\"p\">.<\/span><span class=\"nf\">unscope<\/span><span class=\"p\">(<\/span><span class=\"ss\">:eager_load<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:preload<\/span><span class=\"p\">).<\/span><span class=\"nf\">group<\/span><span class=\"p\">(<\/span><span class=\"ss\">:id<\/span><span class=\"p\">).<\/span><span class=\"nf\">select<\/span><span class=\"p\">(<\/span><span class=\"ss\">:id<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Dockerfiles_%D9%BE%DB%8C%D8%B4%E2%80%8C%D9%81%D8%B1%D8%B6_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_New_Rails\"><\/span>\n<p>  Dockerfiles \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc New Rails<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Docker \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u06af\u0632\u06cc\u0646\u0647 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f Rails \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.  \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0634\u0627\u0645\u0644:<\/p>\n<ul>\n<li><code>Dockerfile<\/code><\/li>\n<li><code>.dockerignore<\/code><\/li>\n<li><code>bin\/docker-entrypoint<\/code><\/li>\n<\/ul>\n<p>\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0646\u0634\u062f\u0647 \u0627\u0646\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0645\u0627\u06cc\u0644\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0631\u0627 \u0646\u0627\u062f\u06cc\u062f\u0647 \u0628\u06af\u06cc\u0631\u06cc\u062f <code>--skip-docker<\/code> \u06af\u0632\u06cc\u0646\u0647.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D9%86%D8%AA%D8%B1%D9%84_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D8%B3%D9%84%D8%A7%D9%85%D8%AA_%D9%BE%DB%8C%D8%B4_%D9%81%D8%B1%D8%B6\"><\/span>\n<p>  \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0633\u0644\u0627\u0645\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails 7.1 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062a\u0639\u0627\u062f\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u0628\u0627\u0631 \u0648 \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u0647\u0627\u06cc \u0622\u067e\u062a\u0627\u06cc\u0645 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u060c \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a <code>Rails::HealthController#show<\/code>\u060c \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f Rails \u0628\u0647 \u0645\u0633\u06cc\u0631 &#8220;\/up&#8221; \u0646\u06af\u0627\u0634\u062a \u0645\u06cc \u0634\u0648\u062f.  \u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0645\u062a\u0639\u0627\u062f\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u0628\u0627\u0631 \u0648 \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u0647\u0627\u06cc \u0622\u067e\u062a\u0627\u06cc\u0645 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0648\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\u060c Redis \u0648 \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0634\u0628\u06a9\u0647 \u062f\u0627\u062e\u0644\u06cc \u0628\u0647 \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0645\u062a\u06a9\u06cc \u0627\u0633\u062a \u0628\u0627\u06cc\u062f \u0628\u0647 \u0637\u0648\u0631 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u0648\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AC%D8%AF%DB%8C%D8%AF_Railsenvlocal_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7%DB%8C\"><\/span>\n<p>  \u062c\u062f\u06cc\u062f <code>Rails.env.local?<\/code> \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 Rails 7.1\u060c \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f <code>local?<\/code> \u0631\u0648\u0634 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0628\u0631\u0631\u0633\u06cc \u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f.<\/p>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">if<\/span> <span class=\"no\">Rails<\/span><span class=\"p\">.<\/span><span class=\"nf\">env<\/span><span class=\"p\">.<\/span><span class=\"nf\">development?<\/span> <span class=\"o\">||<\/span> <span class=\"no\">Rails<\/span><span class=\"p\">.<\/span><span class=\"nf\">env<\/span><span class=\"p\">.<\/span><span class=\"nf\">test?<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">if<\/span> <span class=\"no\">Rails<\/span><span class=\"p\">.<\/span><span class=\"nf\">env<\/span><span class=\"p\">.<\/span><span class=\"nf\">local?<\/span>\n<span class=\"k\">end<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AC%D8%AF%DB%8C%D8%AF_ActiveRecord_Persistenceupdate_attribute_%D8%B1%D9%88%D8%B4\"><\/span>\n<p>  \u062c\u062f\u06cc\u062f <code>ActiveRecord::Persistence#update_attribute!<\/code> \u0631\u0648\u0634<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Rails \u06cc\u06a9 \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a\u060c <code>ActiveRecord::Persistence#update_attribute!<\/code>\u060c \u06a9\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0634\u0627\u0628\u0647\u06cc \u062f\u0627\u0631\u062f <code>update_attribute<\/code> \u0627\u0645\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>save!<\/code> \u0628\u062c\u0627\u06cc <code>save<\/code>.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight ruby\"><code><span class=\"k\">class<\/span> <span class=\"nc\">Apm<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActiveRecord<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span>\n  <span class=\"n\">before_save<\/span> <span class=\"ss\">:check_name<\/span>\n\n  <span class=\"k\">def<\/span> <span class=\"nf\">check_name<\/span> <span class=\"o\">=<\/span> <span class=\"kp\">throw<\/span><span class=\"p\">(<\/span><span class=\"ss\">:abort<\/span><span class=\"p\">)<\/span> <span class=\"k\">if<\/span> <span class=\"nb\">name<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"abort\"<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"n\">monitor<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Apm<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"ss\">name: <\/span><span class=\"s2\">\"App Signal\"<\/span><span class=\"p\">)<\/span>\n<span class=\"c1\"># =&gt; #&lt;Apm name: \"App Signal\"&gt;<\/span>\n\n<span class=\"n\">monitor<\/span><span class=\"p\">.<\/span><span class=\"nf\">update_attribute!<\/span><span class=\"p\">(<\/span><span class=\"ss\">:name<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"AppSignal\"<\/span><span class=\"p\">)<\/span>\n<span class=\"c1\"># =&gt; #&lt;Apm name: \"AppSignal\"&gt;<\/span>\n\n<span class=\"n\">monitor<\/span><span class=\"p\">.<\/span><span class=\"nf\">update_attribute!<\/span><span class=\"p\">(<\/span><span class=\"ss\">:name<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"abort\"<\/span><span class=\"p\">)<\/span>\n<span class=\"c1\"># raises ActiveRecord::RecordNotSaved<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%84%DA%AF%D9%88%D9%87%D8%A7%DB%8C%DB%8C_%DA%A9%D9%87_%D9%82%D8%A7%D8%AF%D8%B1_%D8%A8%D9%87_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%85%D8%AD%D9%84%DB%8C_%D9%87%D8%A7%DB%8C_%D9%BE%D8%B0%DB%8C%D8%B1%D9%81%D8%AA%D9%87_%D8%B4%D8%AF%D9%87_%D9%87%D8%B3%D8%AA%D9%86%D8%AF\"><\/span>\n<p>  \u0627\u0644\u06af\u0648\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0642\u0627\u062f\u0631 \u0628\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0645\u062d\u0644\u06cc \u0647\u0627\u06cc \u067e\u0630\u06cc\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0647\u0633\u062a\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0644\u06af\u0648\u0647\u0627 \u0628\u0627 \u06af\u0632\u06cc\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0647\u0633\u062a\u0646\u062f\u060c \u062a\u0642\u0648\u06cc\u062a \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f.<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u0627\u0644\u06af\u0648\u0647\u0627 \u0647\u0631 \u0645\u062d\u0644\u06cc \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u06a9\u0644\u0645\u0647 \u06a9\u0644\u06cc\u062f\u06cc \u0645\u06cc \u067e\u0630\u06cc\u0631\u0646\u062f.  \u0628\u0627 7.1\u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc Rails \u0627\u0641\u0631\u0627\u062f \u0645\u062d\u0644\u06cc \u067e\u0630\u06cc\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u062e\u0627\u0635 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0646\u0638\u0631 \u062c\u0627\u062f\u0648\u06cc\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0647\u0628\u0648\u062f \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0648 \u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0627\u0632\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0627\u0631 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u0642\u0627\u0644\u0628 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u06cc\u06a9 \u062c\u0632\u0626\u06cc \u062f\u0631 Rails \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight erb\"><code><span class=\"c\">&lt;%# locals: (title: \"Default title\", comment_count: 0) %&gt;<\/span>\n\n<span class=\"nt\">&lt;h2&gt;<\/span><span class=\"cp\">&lt;%=<\/span> <span class=\"n\">title<\/span> <span class=\"cp\">%&gt;<\/span><span class=\"nt\">&lt;\/h2&gt;<\/span>\n<span class=\"nt\">&lt;span<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"comment-count\"<\/span><span class=\"nt\">&gt;<\/span><span class=\"cp\">&lt;%=<\/span> <span class=\"n\">comment_count<\/span> <span class=\"cp\">%&gt;<\/span><span class=\"nt\">&lt;\/span&gt;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u062c\u0627\u06cc:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight erb\"><code><span class=\"cp\">&lt;%<\/span> <span class=\"n\">title<\/span> <span class=\"o\">=<\/span> <span class=\"n\">local_assigns<\/span><span class=\"p\">[<\/span><span class=\"ss\">:title<\/span><span class=\"p\">]<\/span> <span class=\"o\">||<\/span> <span class=\"s2\">\"Default title\"<\/span> <span class=\"cp\">%&gt;<\/span>\n<span class=\"cp\">&lt;%<\/span> <span class=\"n\">comment_count<\/span> <span class=\"o\">=<\/span> <span class=\"n\">local_assigns<\/span><span class=\"p\">[<\/span><span class=\"ss\">:comment_count<\/span><span class=\"p\">]<\/span> <span class=\"o\">||<\/span> <span class=\"mi\">0<\/span> <span class=\"cp\">%&gt;<\/span>\n\n<span class=\"nt\">&lt;h2&gt;<\/span><span class=\"cp\">&lt;%=<\/span> <span class=\"n\">title<\/span> <span class=\"cp\">%&gt;<\/span><span class=\"nt\">&lt;\/h2&gt;<\/span>\n<span class=\"nt\">&lt;span<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"comment-count\"<\/span><span class=\"nt\">&gt;<\/span><span class=\"cp\">&lt;%=<\/span> <span class=\"n\">comment_count<\/span> <span class=\"cp\">%&gt;<\/span><span class=\"nt\">&lt;\/span&gt;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\"><\/span>\n<p>  \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c Rails 7.1 \u0646\u0648\u06cc\u062f \u0628\u0647\u0628\u0648\u062f\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 Rails 7 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u060c \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc\u200c\u0647\u0627 \u0648 \u0631\u0641\u0639 \u0627\u0634\u06a9\u0627\u0644\u060c \u06cc\u0627\u062f\u062f\u0627\u0634\u062a\u200c\u0647\u0627\u06cc \u0627\u0646\u062a\u0634\u0627\u0631 Rails 7.1 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u062f \u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9!<\/p>\n<p><strong>PS \u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u067e\u0633\u062a\u200c\u0647\u0627\u06cc Ruby Magic \u0631\u0627 \u0628\u0647\u200c\u0645\u062d\u0636 \u0627\u0646\u062a\u0634\u0627\u0631 \u0645\u0637\u0628\u0648\u0639\u0627\u062a \u0628\u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u062f\u0631 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 Ruby Magic \u0645\u0634\u062a\u0631\u06a9 \u0634\u0648\u06cc\u062f \u0648 \u0647\u06cc\u0686 \u067e\u0633\u062a\u06cc \u0631\u0627 \u0627\u0632 \u062f\u0633\u062a \u0646\u062f\u0647\u06cc\u062f!<\/strong><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Rails 7 \u0646\u0633\u062e\u0647 \u062e\u0648\u0634\u0627\u06cc\u0646\u062f\u06cc \u0628\u0648\u062f \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0634\u062a. \u062f\u0631 \u0628\u0627\u0637\u0646\u060c Rails 7 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0648 Zeitwerk \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f. \u0638\u0627\u0647\u0631 Hotwire \u0628\u0647 \u0631\u0627\u0647 \u062d\u0644 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f Rails \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f. Rails 7.1 \u0628\u0647 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":9164,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-9163","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/9163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=9163"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/9163\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/9164"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=9163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=9163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=9163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}