Ruby on Rails archive

Web Archives

Allow users to view all of the mailing list's communications through a web interface.

Built with the griddler gem, this series reflects inbound-email handling of its time rather than Rails' Action Mailbox.

This article builds on top of the Mailing Lists functionality.

Since we're storing all the messages in the database, let's display the full history of group discussions within our application for new and old members to browse:

# config/routes.rb

resources :groups, only: "index" do
  resources :discussions, only: %w[index show]
end
# app/controllers/groups_controller.rb
class GroupsController < ApplicationController
  def index
    @groups = Group.order(:name)
  end
end
# app/controllers/discussions_controller.rb
class DiscussionsController < ApplicationController
  before_action :load_group

  def index
    @discussions = @group.discussions.order(created_at: :desc)
  end

  def show
    @discussion = @group.discussions.find(params[:id])
    @messages = @discussion.messages.order(:created_at)
  end

private

  def load_group
    @group = Group.find(params[:group_id])
  end
end
<!-- app/views/groups/index.html.erb -->

<ul>
<% @groups.each do |group| %>
  <li><%= link_to group.name, group_discussions_path(group) %></li>
<% end %>
</ul>
<!-- app/views/discussions/index.html.erb -->

<h1><%= @group.name %></h1>

<ul>
<% @discussions.each do |discussion| %>
  <li><%= link_to discussion.subject, group_discussion_path(@group, discussion) %></li>
<% end %>
</ul>
<!-- app/views/discussions/show.html.erb -->

<h1><%= @discussion.subject %></h1>

<% @messages.each do |message| %>
  <p>From: <%= message.from.name %></p>
  <p>Timestamp: <%= message.created_at.to_fs(:timestamp) %></p>

  <%= simple_format message.content %>
<% end %>
Dan Cunning

Ruby on Rails contractor from Atlanta, GA, focusing on simplicity and usability through solid design.