In my music review app the Pins model has attributes of Pin.artist and Pin.album. I'm trying to list each artist reviewed on the site and which albums of theirs have been reviewed. Below is what I have so far, but I want to do it without repeating the artist name.
Controller:
@pin_albums = Pin.group(:album).order('artist')View:
<% @pin_albums.each do |pin| %>
<%= pin.artist %> |
<%= link_to pin.album, copy_pin_path(pin) %>
<br/>
<% end %>This lists them like this:
The Beatles | Let It Be The Beatles | Abbey Road Bob Dylan | Blood On The Tracks Bob Dylan | Highway 61 Revisited
I want to list them like so:
The Beatles | Let It Be
| Abbey Road
Bob Dylan | Blood On The Tracks
| Highway 61 RevisitedI need to do something to the effect of:
<% @pin_albums.each do |pin| %>
<ul>
<li><%= pin.artist %></li>
<ul>
<% pin.artist.each do |pin_album| %>
<li><%= link_to pin_album.album, pin_album %></li>
<% end %>
<br/>
<% end %> I know that the above nested tables won't work, but that's the gist of what I'm trying to figure out.
<% @pin_albums.each do |pin| %>
<%= (last_artist ||= nil) != pin.artist ? (last_artist = pin.artist) : '' %> |
<%= link_to pin.album, copy_pin_path(pin) %>
<br/>
<% end %>
--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLsQnnC32Xru-A6P1_Tr6SeL2ex6a%3DNCUOxV9Yrjr5%2BtJQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLs2yYaqwmrCV4sYXYDnniaWK03cHBJGGhwimXava69Tzg%40mail.gmail.com.
<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 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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CACmC4yCx5jJcSisuZV08jHsCC0hsgPpY8xhpVtnX8e65vL-KiA%40mail.gmail.com.
--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@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.
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'
The optional GROUP BY clause has the general form
GROUP BY expression [, ...]
GROUP BY will condense into a single row all selected rows that share the same values for the grouped expressions. expression can be an input column name, or the name or ordinal number of an output column (SELECT list item), or an arbitrary expression formed from input-column values. In case of ambiguity, a GROUP BY name will be interpreted as an input-column name rather than an output column name.
Aggregate functions, if any are used, are computed across all rows making up each group, producing a separate value for each group (whereas without GROUP BY, an aggregate produces a single value computed across all the selected rows). When GROUP BY is present, it is not valid for the SELECT list expressions to refer to ungrouped columns except within aggregate functions, since there would be more than one possible value to return for an ungrouped column.