diff --git a/app/controllers/parties_controller.rb b/app/controllers/parties_controller.rb
index d299b34..daf52ce 100644
--- a/app/controllers/parties_controller.rb
+++ b/app/controllers/parties_controller.rb
@@ -6,6 +6,7 @@ class PartiesController < ApplicationController
end
def show
+ @friends = Friend.order(:lastname, :firstname)
end
def new
@@ -45,6 +46,33 @@ class PartiesController < ApplicationController
end
end
+ def toggle_attendent
+ member = false
+ party = Party.find_by(id: params[:party_id])
+ friend = Friend.find_by(id: params[:friend_id])
+
+ if party.attendents.exists?( friend_id: friend.id )
+ puts "gefunden"
+ party.attendents.where(friend_id: friend.id).delete_all
+ else
+ puts "nicht gefunden"
+ party.attendents.create(friend_id: friend.id)
+ member = true
+ end
+
+ render turbo_stream:
+ turbo_stream.replace(
+ "party-#{party.id}-#{friend.id}",
+ partial: 'parties/attendent',
+ locals: {
+ friend: friend,
+ party: party,
+ member: member
+ }
+ )
+
+ end
+
private
# Use callbacks to share common setup or constraints between actions.
def set_party
diff --git a/app/jobs/walk_reminder_job.rb b/app/jobs/walk_reminder_job.rb
deleted file mode 100644
index 693d5e6..0000000
--- a/app/jobs/walk_reminder_job.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class WalkReminderJob < ApplicationJob
- queue_as :default
-
- def perform(*args)
- puts "Go with the dog!"
- end
-end
diff --git a/app/models/attendent.rb b/app/models/attendent.rb
index 58372a8..3d622d7 100644
--- a/app/models/attendent.rb
+++ b/app/models/attendent.rb
@@ -1,4 +1,4 @@
class Attendent < ApplicationRecord
- belongs_to :parties
- belongs_to :friends
+ belongs_to :party
+ belongs_to :friend
end
diff --git a/app/models/friend.rb b/app/models/friend.rb
index f6d4a2c..6cc8f19 100644
--- a/app/models/friend.rb
+++ b/app/models/friend.rb
@@ -1,4 +1,7 @@
class Friend < ApplicationRecord
+ has_many :attendents
+ has_many :parties, through: :attendents
+
validates :firstname, :lastname, :email, :telefon, presence: true
def fullname
diff --git a/app/models/party.rb b/app/models/party.rb
index 2fd96f8..0aa7eff 100644
--- a/app/models/party.rb
+++ b/app/models/party.rb
@@ -1,3 +1,6 @@
class Party < ApplicationRecord
+ has_many :attendents
+ has_many :friends, through: :attendents
+
validates :title, :location, :start_date, :start_time, :status, presence: true
end
diff --git a/app/views/friends/index.html.erb b/app/views/friends/index.html.erb
index 24825e4..ed50203 100644
--- a/app/views/friends/index.html.erb
+++ b/app/views/friends/index.html.erb
@@ -16,8 +16,8 @@
<%= friend.fullname %>
-
- 12
+
+ <%= friend.parties.count %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 3f2214b..20a7102 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -1,7 +1,7 @@
-
<%= content_for(:title) || "Blog" %>
+
<%= content_for(:title) || "Meine Website" %>
diff --git a/app/views/parties/_attendent.erb b/app/views/parties/_attendent.erb
new file mode 100644
index 0000000..e84d107
--- /dev/null
+++ b/app/views/parties/_attendent.erb
@@ -0,0 +1,6 @@
+
"
+ class="flex justify-between w-full border rounded mb-2 p-2 <%= 'bg-green-400 text-white' if member %>">
+ <%= link_to party_toggle_attendent_path(party.id, friend.id) do %>
+ <%= friend.fullname %>
+ <% end %>
+
diff --git a/app/views/parties/index.html.erb b/app/views/parties/index.html.erb
index 0bf270b..002ead8 100644
--- a/app/views/parties/index.html.erb
+++ b/app/views/parties/index.html.erb
@@ -18,8 +18,8 @@
<%= party.title %>
-
- 12
+
+ <%= party.attendents.count %>
@@ -30,7 +30,7 @@
- <%= link_to edit_party_path(party),
+ <%= link_to party_path(party),
class: "hover:bg-green-400 hover:text-white font-medium rounded border px-2 py-1" do %>
<% end %>
diff --git a/app/views/parties/show.html.erb b/app/views/parties/show.html.erb
index f5c9cf7..166d349 100644
--- a/app/views/parties/show.html.erb
+++ b/app/views/parties/show.html.erb
@@ -5,9 +5,18 @@
<%= notice %>
<% end %>
-
Showing party
+
Party People
+
+
+
+ <% @friends.each do |friend| %>
+ <%= render 'parties/attendent',
+ party: @party, friend: friend,
+ member: @party.attendents.exists?( friend_id: friend.id ) %>
+ <% end %>
+
+
+
+ <%= link_to "Übersicht", parties_path, class: 'btn-show' %>
- <%= link_to "Edit this party", edit_party_path(@party), class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %>
- <%= link_to "Back to parties", parties_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %>
- <%= button_to "Destroy this party", @party, method: :delete, form_class: "sm:inline-block mt-2 sm:mt-0 sm:ml-2", class: "w-full rounded-md px-3.5 py-2.5 text-white bg-red-600 hover:bg-red-500 font-medium cursor-pointer", data: { turbo_confirm: "Are you sure?" } %>
diff --git a/config/routes.rb b/config/routes.rb
index ce8e18e..3d8595b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,7 +5,9 @@ Rails.application.routes.draw do
# get "manifest" => "rails/pwa#manifest", as: :pwa_manifest
# get "service-worker" => "rails/pwa#service_worker", as: :pwa_service_worker
- resources :parties
+ resources :parties do
+ get 'toggle-attendent/:friend_id' => 'parties#toggle_attendent', as: :toggle_attendent
+ end
resources :friends
get "pages/:page" => "welcome#pages", as: :pages
diff --git a/db/migrate/20251122103750_create_attendents.rb b/db/migrate/20251122103750_create_attendents.rb
index 7ceeea9..b438a93 100644
--- a/db/migrate/20251122103750_create_attendents.rb
+++ b/db/migrate/20251122103750_create_attendents.rb
@@ -1,8 +1,8 @@
class CreateAttendents < ActiveRecord::Migration[8.0]
def change
create_table :attendents do |t|
- t.references :parties, null: false, foreign_key: true
- t.references :friends, null: false, foreign_key: true
+ t.references :party, null: false, foreign_key: true
+ t.references :friend, null: false, foreign_key: true
t.string :status, default: 'offen'
t.timestamps
end