1"use strict";(self.webpackChunkgatsby_starter_default=self.webpackChunkgatsby_starter_default||[]).push([[2929],{50040:function(e,n,a){a.r(n),a.d(n,{Head:function(){return b},default:function(){return y}});var t=a(28453),s=a(96540);function l(e){const n=Object.assign({p:"p",span:"span",h2:"h2",a:"a",strong:"strong",ul:"ul",li:"li"},(0,t.R)(),e.components);return s.createElement(s.Fragment,null,s.createElement(n.p,null,"ActiveRecord ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">group</code>'}})," method organizes records in a database query\ninto groups based on specified attributes.\nIt is helpful for aggregations,\ncalculations,\nand\ndisplaying data in a structured way.\nIt generates a SQL query with a ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">GROUP BY</code>'}})," clause."),"\n",s.createElement(n.p,null,"A generic syntax for ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">group</code>'}})," method in Rails is:"),"\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby">ModelName<span class="token punctuation">.</span>group<span class="token punctuation">(</span>column1<span class="token punctuation">,</span> column2<span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span></code></pre></div>'}}),"\n",s.createElement(n.p,null,"To group ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">Post</code>'}})," based on ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">author</code>'}}),",\nyou need to write the code as below:"),"\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby"><span class="token comment"># Group posts by author</span>\nposts <span class="token operator">=</span> Post<span class="token punctuation">.</span>group<span class="token punctuation">(</span><span class="token symbol">:author</span><span class="token punctuation">)</span>\n\n<span class="token constant">SELECT</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`*`</span></span> <span class="token constant">FROM</span> <span class="token command-literal"><span class="token command string">`posts`</span></span> <span class="token constant">GROUP</span> <span class="token constant">BY</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`author`</span></span></code></pre></div>'}}),"\n",s.createElement(n.h2,{id:"before-rails-71",style:{position:"relative"}},s.createElement(n.a,{href:"#before-rails-71","aria-label":"before rails 71 permalink",className:"anchor before"},s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"Before Rails 7.1"),"\n",s.createElement(n.p,null,s.createElement(n.a,{href:"https://github.com/rails/rails/pull/33611"},"Rails 6 added the ActiveRecord#reselect\nmethod")," a short-hand\nfor ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">unscope(:select).select(fields)</code>'}}),".\nRails has ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">reorder</code>'}}),"\nand\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">rewhere</code>'}})," methods in ActiveRecord relation.\nYou can use them to override existing ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">order</code>'}}),"\nand\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">where</code>'}})," clauses on an ",s.createElement(n.strong,null,"ActiveRecord::Relation"),"."),"\n",s.createElement(n.p,null,"To reset the ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">group</code>'}})," clause,\nyou need to use the ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">unscope</code>'}})," method."),"\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby">posts <span class="token operator">=</span> Post<span class="token punctuation">.</span>group<span class="token punctuation">(</span><span class="token symbol">:author</span><span class="token punctuation">)</span><span class="token punctuation">.</span>unscope<span class="token punctuation">(</span><span class="token symbol">:group</span><span class="token punctuation">)</span><span class="token punctuation">.</span>group<span class="token punctuation">(</span><span class="token symbol">:status</span><span class="token punctuation">)</span>\n\n<span class="token constant">SELECT</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`*`</span></span> <span class="token constant">FROM</span> <span class="token command-literal"><span class="token command string">`posts`</span></span> <span class="token constant">GROUP</span> <span class="token constant">BY</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`status`</span></span></code></pre></div>'}}),"\n",s.createElement(n.h2,{id:"in-rails-71",style:{position:"relative"}}
1,s.createElement(n.a,{href:"#in-rails-71","aria-label":"in rails 71 permalink",className:"anchor before"},s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"In Rails 7.1"),"\n",s.createElement(n.p,null,s.createElement(n.a,{href:"https://github.com/rails/rails/pull/47010"},"Rails 7.1 introduces ActiveRecord regroup &\nregroup! methods"),"\nto reset previously set group statements."),"\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby">posts <span class="token operator">=</span> Post<span class="token punctuation">.</span>group<span class="token punctuation">(</span><span class="token symbol">:author</span><span class="token punctuation">)</span><span class="token punctuation">.</span>regroup<span class="token punctuation">(</span><span class="token symbol">:status</span><span class="token punctuation">)</span>\n\n<span class="token constant">SELECT</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`*`</span></span> <span class="token constant">FROM</span> <span class="token command-literal"><span class="token command string">`posts`</span></span> <span class="token constant">GROUP</span> <span class="token constant">BY</span> <span class="token command-literal"><span class="token command string">`posts`</span></span><span class="token punctuation">.</span><span class="token command-literal"><span class="token command string">`status`</span></span></code></pre></div>'}}),"\n",s.createElement(n.p,null,"The ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">regroup</code>'}})," method simplifies resetting a query's grouping by\nconveniently combining ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">unscope(:group)</code>'}}),"\nand\n",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">group(fields)</code>'}})," in a single step."),"\n",s.createElement(n.p,null,"In summary,\nthe ",s.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">regroup</code>'}})," method offers:"),"\n",s.createElement(n.ul,null,"\n",s.createElement(n.li,null,"\n",s.createElement(n.p,null,s.createElement(n.strong,null,"Flexibility:"),"\nDynamically adjust query groupings for greater adaptability."),"\n"),"\n",s.createElement(n.li,null,"\n",s.createElement(n.p,null,s.createElement(n.strong,null,"Readability:"),"\nImprove code clarity with concise and expressive syntax."),"\n"),"\n",s.createElement(n.li,null,"\n",s.createElement(n.p,null,s.createElement(n.strong,null,"Efficiency:"),"\nStreamline query building and potentially enhance performance."),"\n"),"\n"),"\n",s.createElement(n.p,null,"To know more about this feature,\nplease refer to this\n",s.createElement(n.a,{href:"https://github.com/rails/rails/pull/47010"},"PR"),"."))}var o=function(e){void 0===e&&(e={});const{wrapper:n}=Object.assign({},(0,t.R)(),e.components);return n?s.createElement(n,e,s.createElement(l,e)):l(e)},c=a(5588),r=a(65427),p=a(20504),u=a(43397),i=a(61942);const m=e=>e.replace(/\/+$/,""),d=(e,n)=>n?""+e+(n.startsWith("/")?n:"/"+n):e,g=(e,n)=>d(m(e),n),h=(e,n)=>d((e=>"undefined"!=typeof window?window.location.origin:m(e))(e),n),k=(e,n)=>{const a=(0,c.d)(n);return a?g(e,a):(e=>g(e,"/shakacode-og.png"))(e)},E=e=>{let{data:n,location:a,children:t}=e;const{frontmatter:l}=n.mdx,{siteUrl:o}=n.site.siteMetadata,c=h(o,a.pathname);return s.createElement(s.Fragment,null,s.createElement(r.A,null),s.createElement(p.A,{header:s.createElement(i.r,{breadcrumb:l.title}),main:s.createElement(s.Fragment,null,s.createElement(i.c,{body:t,title:l.title,author:l.author,date:l.date,link:c,
1categories:l.categories,featuredImage:l.featuredImage,showFeaturedImage:l.showFeaturedImage}),s.createElement(u.LN,null))}))};function y(e){return s.createElement(E,e,s.createElement(o,e))}const b=e=>{let{data:n,location:a}=e;const{frontmatter:t,excerpt:l}=n.mdx,{siteMetadata:o}=n.site,{siteUrl:c,title:r,description:p}=o,u=((e,n,a)=>e.excerpt||n||a)(t,l,p),i=k(c,t.featuredImage),m=g(c,a.pathname);return s.createElement(s.Fragment,null,s.createElement("title",null,t.title+" | "+r),s.createElement("link",{rel:"canonical",href:m}),s.createElement("meta",{name:"description",content:u}),s.createElement("meta",{property:"og:title",content:t.title}),s.createElement("meta",{property:"og:description",content:u}),s.createElement("meta",{property:"og:type",content:"article"}),s.createElement("meta",{property:"og:url",content:m}),s.createElement("meta",{property:"og:image",content:i}),s.createElement("meta",{name:"image",content:i}),s.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),s.createElement("meta",{name:"twitter:title",content:t.title}),s.createElement("meta",{name:"twitter:description",content:u}),s.createElement("meta",{name:"twitter:image",content:i}))}}}]); 2//# sourceMappingURL=component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-activerecord-regroup-index-mdx-7116fff41ceb8019d555.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.