Ok, so I need some help again. Every thing works great locally, but when I
push to Heroku the controller code doesn't play nice with the Postgres
database. Here is the controller again:

@pin_albums = Pin.group(:album).order('artist asc')

The error in my log is:

ActionView::Template::Error (PG::GroupingError: ERROR:  column "pins.id"
must appear in the GROUP BY clause or be used in an aggregate function

2015-02-21T20:42:53.231456+00:00 app[web.1]: LINE 1: SELECT "pins".* FROM
"pins"  GROUP BY album  ORDER BY artist...

2015-02-21T20:42:53.231458+00:00 app[web.1]:                ^

2015-02-21T20:42:53.231460+00:00 app[web.1]: : SELECT "pins".* FROM "pins"
GROUP BY album  ORDER BY artist asc):

2015-02-21T20:42:53.231462+00:00 app[web.1]:     12:         <th></th>

2015-02-21T20:42:53.231464+00:00 app[web.1]:     13:         <th>Album</th>

2015-02-21T20:42:53.231466+00:00 app[web.1]:     14:       </tr>

2015-02-21T20:42:53.231469+00:00 app[web.1]:     15:     <%
@pin_albums.each do |pin| %>

2015-02-21T20:42:53.231471+00:00 app[web.1]:     16:         <tr>

2015-02-21T20:42:53.231473+00:00 app[web.1]:     17:           <td><%=
(last_artist == pin.artist)  ?  ''   :   pin.artist %></td>

2015-02-21T20:42:53.231475+00:00 app[web.1]:     18:           <td><%=
link_to image_tag(pin.image), pin %></td>

2015-02-21T20:42:53.231478+00:00 app[web.1]:
app/views/pages/artists.html.erb:15:in
`_app_views_pages_artists_html_erb__4200071474432892294_70083862737420'


I've been Googling it, but any answers I've found haven't been clear enough
for me to fix the issue. I see it says that pins.id must appear in the
Group By clause, but I'm not clear on that.


On Fri, Feb 20, 2015 at 1:22 PM, TTambe <tambe...@gmail.com> wrote:

> You're absolutely right Colin, thanks. I'm not that familiar with that
> simplified syntax of if/else statements, so I learned quite a bit from this
> exchange!
>
> On Fri, Feb 20, 2015 at 3:57 AM, Colin Law <clan...@gmail.com> wrote:
>
>> On 20 February 2015 at 00:01, TTambe <tambe...@gmail.com> wrote:
>> > I actually ended up doing this which worked:
>> >
>> >     <% last_artist ||= nil %>
>> >
>> >   <table id="artist">
>> >     <tr>
>> >       <th>Artist</th>
>> >       <th></th>
>> >       <th>Album</th>
>> >    </tr>
>> > <% @pin_albums.each do |pin| %>
>> >   <% if last_artist != pin.artist %>
>> >     <tr>
>> >       <td><%= pin.artist %></td>
>> >       <td><%= link_to image_tag(pin.image), pin %></td>
>> >       <td><%= link_to pin.album, copy_pin_path(pin) %></td>
>> >     </tr>
>> >   <% else %>
>> >     <tr>
>> >       <td></td>
>> >       <td><%= link_to image_tag(pin.image), pin %></td>
>> >       <td><%= link_to pin.album, copy_pin_path(pin) %></td>
>> >     </tr>
>> >   <% end %>
>> >   <% last_artist = pin.artist %>
>> > <% end %>
>>
>> You are right in that the key was to initialise last_artist at an
>> appropriate scope.
>> There are an awful lot of repeated lines there, Suppose you wanted to
>> change the detail of the contents of the last cell in each row, you
>> would have to change it in two places.  You should put the if
>> statement round just the first cell not round the whole row.  so for
>> that cell use something like
>> <td>
>>   <%= (last_artist == pin.artist)  ?  ''   :   pin.artist %>
>> </td>
>> Or use an if statement inside the <td> </td> if you prefer.  That is
>> two single quotes in the line above of course.
>>
>> Colin
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to rubyonrails-talk+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-talk@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLuBuJUBego%3Dq_5jDGaBRCA0rVHRwHdZDwjKrg665Hbqiw%40mail.gmail.com
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CAEdg5qS0PbX1OQ89iVc4ZTa40HtWA-LZjkno9H96t9P-BN6Qng%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to