From 51629c5c42270a346885057a441095c964101cc1 Mon Sep 17 00:00:00 2001
From: erdgeist
Date: Tue, 30 Jun 2026 03:55:42 +0200
Subject: Fix events CRUD for standalone events and add events to admin menu
- event_params now permits title, description, is_primary
- event_information helper lists all node.events, not just the first
- Occurrence.generate handles nil node (standalone events)
- Page.aggregate order_by title uses correlated subquery to avoid
GROUP BY conflict with tag-filter path; order_direction whitelisted
to ASC/DESC to prevent SQL injection
- Events link added to admin menu bar
- events/index shows title, is_primary; drops latitude/longitude columns
---
app/controllers/events_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'app/controllers/events_controller.rb')
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index f50da3e..3a60cf9 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -94,6 +94,6 @@ class EventsController < ApplicationController
private
def event_params
- params.require(:event).permit(:start_time, :end_time, :rrule, :custom_rrule, :allday, :url, :latitude, :longitude, :node_id, :location)
+ params.require(:event).permit(:title, :description, :is_primary, :start_time, :end_time, :rrule, :custom_rrule, :allday, :url, :latitude, :longitude, :node_id, :location)
end
end
--
cgit v1.3
From b6416e86c9c58b8e886c14de55b01aeb863b8676 Mon Sep 17 00:00:00 2001
From: erdgeist
Date: Thu, 2 Jul 2026 00:12:02 +0200
Subject: Clean up events views: return_to, subnav, remove custom_rrule
- events_controller: wire return_to through show and new actions;
create respects return_to with fallback to node/event path;
new pre-populates node_id and tag_list from params
- events/edit: remove custom_rrule checkbox; node link removed from
subnav (use show for node navigation); destroy button added
- events/new: remove custom_rrule checkbox; add return_to hidden
field and back link; tag_list field added
- events/show: fix back link via safe_return_to; add node link to
subnav; add destroy button; remove custom_rrule display; show
humanized rrule below raw string
- events/index: destructive class on destroy button; node_id column
replaced with node link; show/edit links carry return_to
- nodes/show: add show/edit links to event entries with return_to
---
app/controllers/events_controller.rb | 10 +++++++---
app/views/events/edit.html.erb | 9 +++------
app/views/events/index.html.erb | 10 ++++------
app/views/events/new.html.erb | 7 ++++---
app/views/events/show.html.erb | 16 +++++++++++-----
app/views/nodes/show.html.erb | 6 +++++-
6 files changed, 34 insertions(+), 24 deletions(-)
(limited to 'app/controllers/events_controller.rb')
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index 3a60cf9..9bed5dd 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -21,6 +21,7 @@ class EventsController < ApplicationController
# GET /events/1.xml
def show
@event = Event.find(params[:id])
+ @return_to = params[:return_to] || events_path
respond_to do |format|
format.html # show.html.erb
@@ -31,7 +32,10 @@ class EventsController < ApplicationController
# GET /events/new
# GET /events/new.xml
def new
- @event = Event.new(:node_id => params[:node_id])
+ @event = Event.new(
+ node_id: params[:node_id],
+ tag_list: params[:tag_list]
+ )
respond_to do |format|
format.html # new.html.erb
@@ -53,7 +57,7 @@ class EventsController < ApplicationController
respond_to do |format|
if @event.save
flash[:notice] = 'Event was successfully created.'
- format.html { redirect_to(@event.node ? edit_node_path(@event.node) : edit_event_path(@event)) }
+ format.html { redirect_to(safe_return_to(params[:return_to] || (@event.node ? edit_node_path(@event.node) : edit_event_path(@event)))) }
format.xml { render :xml => @event, :status => :created, :location => @event }
else
format.html { render :action => "new" }
@@ -94,6 +98,6 @@ class EventsController < ApplicationController
private
def event_params
- params.require(:event).permit(:title, :description, :is_primary, :start_time, :end_time, :rrule, :custom_rrule, :allday, :url, :latitude, :longitude, :node_id, :location)
+ params.require(:event).permit(:title, :description, :start_time, :end_time, :rrule, :allday, :url, :latitude, :longitude, :node_id, :location, :tag_list)
end
end
diff --git a/app/views/events/edit.html.erb b/app/views/events/edit.html.erb
index 17457df..5aee501 100644
--- a/app/views/events/edit.html.erb
+++ b/app/views/events/edit.html.erb
@@ -1,9 +1,6 @@
<% content_for :subnavigation do %>
<%= link_to 'back', safe_return_to(params[:return_to] || events_path) %>
- <% if @event.node %>
- <%= link_to 'node', edit_node_path(@event.node) %>
- <% end %>
- <%= link_to 'show', @event %>
+ <%= button_to 'destroy', event_path(@event), method: :delete, form: { data: { confirm: 'Delete this event?' }, class: 'button_to destructive' } %>
<% end %>
Editing event
@@ -25,8 +22,8 @@
<%= f.text_field :rrule %>
- <%= f.label :custom_rrule %>
- <%= f.check_box :custom_rrule %>
+ <%= f.label :tag_list, "Tags" %>
+ <%= f.text_field :tag_list %>
<%= f.label :allday %>
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index 064fa86..d0458d7 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -3,7 +3,6 @@
| Title |
- Is primary |
Start time |
End time |
Rrule |
@@ -16,17 +15,16 @@
<% @events.each do |event| %>
| <%=h event.display_title %> |
- <%=h event.is_primary %> |
<%=h event.start_time %> |
<%=h event.end_time %> |
<%=h event.rrule %> |
<%=h event.custom_rrule %> |
<%=h event.allday %> |
<%=h event.url %> |
- <%=h event.node_id %> |
- <%= link_to 'Show', event %> |
- <%= link_to 'Edit', edit_event_path(event) %> |
- <%= button_to 'Destroy', event, method: :delete, form: { data: { confirm: 'Are you sure?' } } %> |
+ <%= event.node ? link_to(event.node_id, node_path(event.node)) : '' %> |
+ <%= link_to 'show', event %> |
+ <%= link_to 'edit', edit_event_path(event) %> |
+ <%= button_to 'destroy', event, method: :delete, form: { data: { confirm: 'Are you sure?' }, class: 'button_to destructive' } %> |
<% end %>
diff --git a/app/views/events/new.html.erb b/app/views/events/new.html.erb
index cd892c5..4e1ef53 100644
--- a/app/views/events/new.html.erb
+++ b/app/views/events/new.html.erb
@@ -16,8 +16,8 @@
<%= f.text_field :rrule %>
- <%= f.label :custom_rrule %>
- <%= f.check_box :custom_rrule %>
+ <%= f.label :tag_list, "Tags" %>
+ <%= f.text_field :tag_list %>
<%= f.label :allday %>
@@ -37,10 +37,11 @@
<%= f.hidden_field :node_id %>
+ <%= hidden_field_tag :return_to, params[:return_to] %>
<%= f.submit 'Create' %>
<% end %>
-<%= link_to 'Back', events_path %>
+<%= link_to 'Back', safe_return_to(params[:return_to] || events_path) %>
diff --git a/app/views/events/show.html.erb b/app/views/events/show.html.erb
index ba14a7d..e206bc4 100644
--- a/app/views/events/show.html.erb
+++ b/app/views/events/show.html.erb
@@ -1,6 +1,9 @@
<% content_for :subnavigation do %>
- <%= link_to 'back', edit_node_path(@event.node) %>
- <%= link_to 'edit', edit_event_path(@event) %>
+ <% if @event.node %>
+ <%= link_to 'node', node_path(@event.node) %>
+ <% end %>
+ <%= link_to 'edit', edit_event_path(@event, return_to: request.path) %>
+ <%= button_to 'destroy', event_path(@event), method: :delete, form: { data: { confirm: 'Delete this event?' }, class: 'button_to destructive' } %>
<% end %>
Event for node <%= @event.node.unique_name %>
@@ -18,11 +21,14 @@
Rrule:
<%=h @event.rrule %>
+ <% if (human = @event.humanize_rrule(I18n.locale)) %>
+
( <%= human %> )
+ <% end %>
- Custom rrule:
- <%=h @event.custom_rrule %>
+ Tags:
+ <%=h @event.tag_list %>
@@ -43,4 +49,4 @@
Longitude:
<%=h @event.longitude %>
-
\ No newline at end of file
+
diff --git a/app/views/nodes/show.html.erb b/app/views/nodes/show.html.erb
index 7223219..2ce3853 100644
--- a/app/views/nodes/show.html.erb
+++ b/app/views/nodes/show.html.erb
@@ -48,7 +48,11 @@
<% @node.events.order(:start_time).each do |event| %>
- - <%= event_schedule_text(event) %><%= " (primary)" if event.is_primary? %>
+ -
+ <%= event_schedule_text(event) %>
+ [<%= link_to 'show', event_path(event, return_to: request.path) %>
+ | <%= link_to 'edit', edit_event_path(event, return_to: request.path) %>]
+
<% end %>
|
--
cgit v1.3
From 206dc5c50a73c5402b90d7fdc8945d3ba9356758 Mon Sep 17 00:00:00 2001
From: erdgeist
Date: Sat, 4 Jul 2026 01:24:55 +0200
Subject: Add self-service event creation from nodes#show
nodes#show's events table now renders unconditionally (previously
hidden entirely for a zero-event node) and gains an "add event" link.
The suggested tag_list is derived from the page's own category tags
via NodesHelper::DEFAULT_EVENT_TAG_BY_PAGE_TAG (erfa-detail/
chaostreff-detail -> open-day) rather than hardcoded, and degrades to
a blank field for any node whose tags don't match - deliberately
universal, not chapter-specific, since Updates have historically
carried event dates the same way.
events#new surfaces *why* the tag was pre-filled via flash.now (not
flash - this is a same-request render, not a redirect), using an
explicit auto_tag_source param passed alongside tag_list rather than
having the controller re-derive the reason from node_id.
No destroy link added to nodes#show's events list - deliberate, per
existing subnav-semantics convention (destructive actions live on the
resource's own views). Covered directly by test.
Adds real coverage for EventsController, previously 100% commented-out
scaffold, plus unit tests for the new tag-mapping helper and the
weekday-abbreviation helpers from the prior commit.
---
app/controllers/events_controller.rb | 4 +
app/helpers/nodes_helper.rb | 14 +++
app/views/nodes/show.html.erb | 4 +-
test/controllers/events_controller_test.rb | 167 ++++++++++++++++++++-------
test/controllers/nodes_controller_test.rb | 33 ++++++
test/models/concerns/rrule_humanizer_test.rb | 15 +++
test/models/helpers/content_helper_test.rb | 4 +
test/models/helpers/nodes_helper_test.rb | 21 ++++
8 files changed, 219 insertions(+), 43 deletions(-)
(limited to 'app/controllers/events_controller.rb')
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index 9bed5dd..b98a38e 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -37,6 +37,10 @@ class EventsController < ApplicationController
tag_list: params[:tag_list]
)
+ if params[:tag_list].present? && params[:auto_tag_source].present?
+ flash.now[:notice] = "Tag '#{params[:tag_list]}' was pre-filled because this page is tagged '#{params[:auto_tag_source]}'. You can remove it below."
+ end
+
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @event }
diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb
index 329bcc5..093bfc6 100644
--- a/app/helpers/nodes_helper.rb
+++ b/app/helpers/nodes_helper.rb
@@ -44,6 +44,20 @@ module NodesHelper
])
end
+ DEFAULT_EVENT_TAG_BY_PAGE_TAG = {
+ 'erfa-detail' => 'open-day',
+ 'chaostreff-detail' => 'open-day'
+ }.freeze
+
+ def default_event_tag_mapping(page)
+ page_tags = page.tag_list
+ DEFAULT_EVENT_TAG_BY_PAGE_TAG.find { |page_tag, _| page_tags.include?(page_tag) }
+ end
+
+ def default_event_tag_list(page)
+ default_event_tag_mapping(page)&.last
+ end
+
def event_schedule_text(event)
if event.rrule.present?
recurrence = event.humanize_rrule(I18n.locale)
diff --git a/app/views/nodes/show.html.erb b/app/views/nodes/show.html.erb
index 2ce3853..c533a55 100644
--- a/app/views/nodes/show.html.erb
+++ b/app/views/nodes/show.html.erb
@@ -42,7 +42,6 @@
Tagged with: |
<%= @page.tag_list %> |
- <% if @node.events.any? %>
| Events |
@@ -55,9 +54,10 @@
<% end %>
+ <% mapping = default_event_tag_mapping(@page) %>
+ <%= link_to 'add event', new_event_path(node_id: @node.id, tag_list: mapping&.last, auto_tag_source: mapping&.first, return_to: request.path) %>
|
- <% end %>
| Title |
<%= sanitize( @page.title ) %> |
diff --git a/test/controllers/events_controller_test.rb b/test/controllers/events_controller_test.rb
index 14e534e..9371ca7 100644
--- a/test/controllers/events_controller_test.rb
+++ b/test/controllers/events_controller_test.rb
@@ -1,45 +1,130 @@
require 'test_helper'
class EventsControllerTest < ActionController::TestCase
- # test "should get index" do
- # get :index
- # assert_response :success
- # assert_not_nil assigns(:events)
- # end
- #
- # test "should get new" do
- # get :new
- # assert_response :success
- # end
- #
- # test "should create event" do
- # assert_difference('Event.count') do
- # post :create, params: { :event => { } }
- # end
- #
- # assert_redirected_to event_path(assigns(:event))
- # end
- #
- # test "should show event" do
- # get :show, params: { :id => events(:one).to_param }
- # assert_response :success
- # end
- #
- # test "should get edit" do
- # get :edit, params: { :id => events(:one).to_param }
- # assert_response :success
- # end
- #
- # test "should update event" do
- # put :update, params: { :id => events(:one).to_param, :event => { } }
- # assert_redirected_to event_path(assigns(:event))
- # end
- #
- # test "should destroy event" do
- # assert_difference('Event.count', -1) do
- # delete :destroy, params: { :id => events(:one).to_param }
- # end
- #
- # assert_redirected_to events_path
- # end
+
+ test "should get index" do
+ login_as :quentin
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:events)
+ end
+
+ test "should get new" do
+ login_as :quentin
+ get :new
+ assert_response :success
+ end
+
+ test "new pre-fills tag_list and explains it via flash when auto_tag_source is given" do
+ login_as :quentin
+ node = create_node_with_published_page
+
+ get :new, params: { node_id: node.id, tag_list: "open-day", auto_tag_source: "erfa-detail" }
+
+ assert_response :success
+ assert_equal "open-day", assigns(:event).tag_list.to_s
+ assert_match "open-day", flash[:notice]
+ assert_match "erfa-detail", flash[:notice]
+ end
+
+ test "new does not flash without an auto_tag_source" do
+ login_as :quentin
+
+ get :new, params: { tag_list: "open-day" }
+
+ assert_response :success
+ assert_nil flash[:notice]
+ end
+
+ test "new with no params renders a blank, unflashed form" do
+ login_as :quentin
+
+ get :new
+
+ assert_response :success
+ assert_nil assigns(:event).tag_list.presence
+ assert_nil flash[:notice]
+ end
+
+ test "should show event" do
+ login_as :quentin
+ node = create_node_with_published_page
+ event = Event.create!(node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour)
+
+ get :show, params: { id: event.id }
+ assert_response :success
+ end
+
+ test "should get edit" do
+ login_as :quentin
+ node = create_node_with_published_page
+ event = Event.create!(node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour)
+
+ get :edit, params: { id: event.id }
+ assert_response :success
+ end
+
+ test "should create event attached to a node" do
+ login_as :quentin
+ node = create_node_with_published_page
+
+ assert_difference('Event.count') do
+ post :create, params: {
+ event: {
+ node_id: node.id,
+ start_time: Time.now,
+ end_time: Time.now + 1.hour,
+ tag_list: "open-day"
+ }
+ }
+ end
+
+ assert_redirected_to edit_node_path(node)
+ assert_equal 'Event was successfully created.', flash[:notice]
+ end
+
+ test "should not create an event without a title or a node_id" do
+ login_as :quentin
+
+ assert_no_difference('Event.count') do
+ post :create, params: { event: { start_time: Time.now, end_time: Time.now + 1.hour } }
+ end
+
+ assert_response :success # re-renders :new, not a redirect
+ end
+
+ test "should honour return_to on create" do
+ login_as :quentin
+ node = create_node_with_published_page
+
+ post :create, params: {
+ event: { node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour },
+ return_to: node_path(node)
+ }
+
+ assert_redirected_to node_path(node)
+ end
+
+ test "should update event" do
+ login_as :quentin
+ node = create_node_with_published_page
+ event = Event.create!(node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour)
+
+ put :update, params: { id: event.id, event: { title: "Updated title" } }
+
+ assert_redirected_to events_path
+ assert_equal "Updated title", event.reload.title
+ end
+
+ test "should destroy event" do
+ login_as :quentin
+ node = create_node_with_published_page
+ event = Event.create!(node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour)
+
+ assert_difference('Event.count', -1) do
+ delete :destroy, params: { id: event.id }
+ end
+
+ assert_redirected_to events_url
+ end
end
diff --git a/test/controllers/nodes_controller_test.rb b/test/controllers/nodes_controller_test.rb
index 53799f1..f14e27c 100644
--- a/test/controllers/nodes_controller_test.rb
+++ b/test/controllers/nodes_controller_test.rb
@@ -379,4 +379,37 @@ class NodesControllerTest < ActionController::TestCase
get :index
end
+ test "show renders events row and add-link for zero-event chapter node" do
+ login_as :quentin
+ node = create_node_with_published_page
+ node.head.tag_list = "erfa-detail"
+ node.head.save!
+
+ get :show, params: { id: node.id }
+ assert_response :success
+ assert_select "a", text: "add event"
+ assert_select "a[href*='tag_list=open-day']"
+ assert_select "a[href*='auto_tag_source=erfa-detail']"
+ end
+
+ test "show renders events row without a tag default for untagged node" do
+ login_as :quentin
+ node = create_node_with_published_page
+
+ get :show, params: { id: node.id }
+ assert_response :success
+ assert_select "a", text: "add event"
+ assert_select "a[href*='tag_list=']", count: 0
+ end
+
+ test "show never renders a destroy link for events" do
+ login_as :quentin
+ node = create_node_with_published_page
+ Event.create!(node_id: node.id, start_time: Time.now, end_time: Time.now + 1.hour)
+
+ get :show, params: { id: node.id }
+ assert_response :success
+ assert_select "form.button_to.destructive", count: 0
+ end
+
end
diff --git a/test/models/concerns/rrule_humanizer_test.rb b/test/models/concerns/rrule_humanizer_test.rb
index 500dbc7..279ff73 100644
--- a/test/models/concerns/rrule_humanizer_test.rb
+++ b/test/models/concerns/rrule_humanizer_test.rb
@@ -81,4 +81,19 @@ class RruleHumanizerTest < ActiveSupport::TestCase
test "falls back to english for unknown locale" do
assert_equal "Every Tuesday", humanize("FREQ=WEEKLY;BYDAY=TU", :fr)
end
+
+ test "wday_abbr returns the correct German abbreviation for each day" do
+ monday = Time.parse("2026-07-06") # confirmed Monday
+ assert_equal "Mo", RruleHumanizer.wday_abbr(monday, :de)
+ assert_equal "Di", RruleHumanizer.wday_abbr(monday + 1.day, :de)
+ assert_equal "Mi", RruleHumanizer.wday_abbr(monday + 2.days, :de)
+ assert_equal "Do", RruleHumanizer.wday_abbr(monday + 3.days, :de)
+ assert_equal "Fr", RruleHumanizer.wday_abbr(monday + 4.days, :de)
+ assert_equal "Sa", RruleHumanizer.wday_abbr(monday + 5.days, :de)
+ assert_equal "So", RruleHumanizer.wday_abbr(monday + 6.days, :de)
+ end
+
+ test "wday_abbr falls back to :de for an unrecognized locale" do
+ assert_equal "Mo", RruleHumanizer.wday_abbr(Time.parse("2026-07-06"), :fr)
+ end
end
diff --git a/test/models/helpers/content_helper_test.rb b/test/models/helpers/content_helper_test.rb
index 2da82d7..a7ed478 100644
--- a/test/models/helpers/content_helper_test.rb
+++ b/test/models/helpers/content_helper_test.rb
@@ -1,4 +1,8 @@
require 'test_helper'
class ContentHelperTest < ActionView::TestCase
+ test "weekday_abbr delegates through the current I18n locale" do
+ I18n.locale = :de
+ assert_equal "Mo", weekday_abbr(Time.parse("2026-07-06"))
+ end
end
diff --git a/test/models/helpers/nodes_helper_test.rb b/test/models/helpers/nodes_helper_test.rb
index 13011de..5d91a88 100644
--- a/test/models/helpers/nodes_helper_test.rb
+++ b/test/models/helpers/nodes_helper_test.rb
@@ -1,4 +1,25 @@
require 'test_helper'
class NodesHelperTest < ActionView::TestCase
+ FakePage = Struct.new(:tag_list)
+
+ test "default_event_tag_mapping matches erfa-detail" do
+ page = FakePage.new(["erfa-detail"])
+ assert_equal ["erfa-detail", "open-day"], default_event_tag_mapping(page)
+ end
+
+ test "default_event_tag_mapping matches chaostreff-detail" do
+ page = FakePage.new(["chaostreff-detail"])
+ assert_equal ["chaostreff-detail", "open-day"], default_event_tag_mapping(page)
+ end
+
+ test "default_event_tag_mapping returns nil for unrelated tags" do
+ page = FakePage.new(["update"])
+ assert_nil default_event_tag_mapping(page)
+ end
+
+ test "default_event_tag_list is nil without a matching tag" do
+ page = FakePage.new([])
+ assert_nil default_event_tag_list(page)
+ end
end
--
cgit v1.3
From ae48c9e86411f8f54f29e72a11b1e4ced48fe437 Mon Sep 17 00:00:00 2001
From: erdgeist
Date: Thu, 9 Jul 2026 15:50:22 +0200
Subject: Paginate Events index
---
app/controllers/events_controller.rb | 4 ++--
app/views/events/index.html.erb | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
(limited to 'app/controllers/events_controller.rb')
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index b98a38e..b9b7892 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -9,10 +9,10 @@ class EventsController < ApplicationController
# GET /events
# GET /events.xml
def index
- @events = Event.all
+ @events = Event.order(:id)
respond_to do |format|
- format.html # index.html.erb
+ format.html { @events = @events.paginate(page: params[:page], per_page: 25) }
format.xml { render :xml => @events }
end
end
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index b6a5b1f..f579fc0 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -2,6 +2,8 @@
<%= link_to 'New event', new_event_path, class: 'action_button' %>
+<%= will_paginate @events %>
+
-
-<%= link_to 'New event', new_event_path, class: 'action_button' %>
--
cgit v1.3
From 6dcbf019deda9ec2809f8735c8b10ba3a5701189 Mon Sep 17 00:00:00 2001
From: erdgeist
Date: Thu, 9 Jul 2026 18:55:04 +0200
Subject: Add an events view for events without node, part 2
---
app/controllers/events_controller.rb | 5 +++++
app/views/events/index.html.erb | 1 +
2 files changed, 6 insertions(+)
(limited to 'app/controllers/events_controller.rb')
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index b9b7892..be3f547 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -17,6 +17,11 @@ class EventsController < ApplicationController
end
end
+ # GET /events/without_node
+ def without_node
+ @events = Event.where(node_id: nil).order(:start_time).paginate(page: params[:page], per_page: 25)
+ end
+
# GET /events/1
# GET /events/1.xml
def show
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index f579fc0..8127e3a 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -1,6 +1,7 @@
Events
<%= link_to 'New event', new_event_path, class: 'action_button' %>
+<%= link_to 'View events without a page →', without_node_events_path %>
<%= will_paginate @events %>
--
cgit v1.3