From b14a2a603f3a3f2c70720ce323b2b8eea920cbab Mon Sep 17 00:00:00 2001 From: Sebskyo Date: Sat, 1 Mar 2025 23:08:02 +0100 Subject: [PATCH] implement appending messages to conversations --- app/controllers/conversations_controller.rb | 19 ++++++++++++++++++- app/controllers/messages_controller.rb | 19 +++++++++++++++++++ app/models/conversation.rb | 2 +- app/views/conversations/index.html.erb | 11 +++++++++++ app/views/conversations/show.html.erb | 15 +++++++++++++++ config/routes.rb | 3 ++- 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/controllers/messages_controller.rb diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb index 75c1322..1de96d3 100644 --- a/app/controllers/conversations_controller.rb +++ b/app/controllers/conversations_controller.rb @@ -1,5 +1,22 @@ # frozen_string_literal: true class ConversationsController < ApplicationController - def index; end + def index + @conversations = @current_user.conversations + end + + def show + @conversation = @current_user.conversations.find(params[:id]) + @messages = @conversation.messages + @prompt = Message.new(conversation: @conversation) + end + + def create + @conversation = @current_user.conversations.new + if @conversation.save + redirect_to @conversation + else + render :index, status: :unprocessable_entity + end + end end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb new file mode 100644 index 0000000..027179c --- /dev/null +++ b/app/controllers/messages_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class MessagesController < ApplicationController + def create + # TODO: Revisit auth once cancancan is installed + @message = Message.new(message_params) + if @message.save + redirect_to @message.conversation + else + redirect_to conversations_path + end + end + + private + + def message_params + params.require(:message).permit(:conversation_id, :body) + end +end diff --git a/app/models/conversation.rb b/app/models/conversation.rb index a80d3cf..3ea3a2f 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -3,5 +3,5 @@ class Conversation < ApplicationRecord belongs_to :user - has_many :messages, dependent: :destro + has_many :messages, dependent: :destroy end diff --git a/app/views/conversations/index.html.erb b/app/views/conversations/index.html.erb index e69de29..b7b3a3f 100644 --- a/app/views/conversations/index.html.erb +++ b/app/views/conversations/index.html.erb @@ -0,0 +1,11 @@ +
+ <%= form_with do |form| %> + <%= form.submit "Start a new conversation" %> + <% end %> +
+ +
  • + <% @conversations.each do |conversation| %> + <%= link_to conversation %> + <% end %> +
  • diff --git a/app/views/conversations/show.html.erb b/app/views/conversations/show.html.erb index e69de29..08245b2 100644 --- a/app/views/conversations/show.html.erb +++ b/app/views/conversations/show.html.erb @@ -0,0 +1,15 @@ +
    + <%= link_to "list conversations", conversations_path %> +
    + + + +<%= form_with model: @prompt do |form| %> + <%= form.text_area :body %> + <%= form.hidden_field :conversation_id %> + <%= form.submit "send message" %> +<% end %> diff --git a/config/routes.rb b/config/routes.rb index cf41ab5..433b757 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,5 +7,6 @@ Rails.application.routes.draw do post :login, to: 'sessions#create' post :logout, to: 'sessions#destroy' - resources :conversations + resources :conversations, only: %i[index show create destroy] + resources :messages, only: %i[create] end