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