Files
growstuff/app/controllers/comments_controller.rb
T
51feec8de1 Add comment support for plantings (#4984)
* Add comment support for plantings

- Add polymorphic comments association, subject, and author methods to Planting.
- Add comments_count column migration for Planting counter cache.
- Update CommentsController and comments view templates to support Planting.
- Render comments list and form on Planting show view.
- Add specs for Planting comments in models, controllers, and requests.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* put 4.0.7 back

* Opt comments on posts into record-page styling temporarily

* Drop hr

* Flatten comments

* Update schema

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Brenda Wallace <brenda@wallace.net.nz>
2026-10-22 15:22:32 +00:00

71 lines
1.7 KiB
Ruby

# frozen_string_literal: true
class CommentsController < ApplicationController
before_action :authenticate_member!, except: %i(index)
load_and_authorize_resource
respond_to :html, :json
respond_to :rss, only: :index
responders :flash
def index
@comments = Comment.order(created_at: :desc).paginate(page: params[:page])
respond_with(@comments)
end
def new
@commentable = find_commentable
@comment = Comment.new
if @commentable
@comments = @commentable.comments
respond_with(@comments)
else
redirect_to(request.referer || root_url,
alert: "Can't post a comment on a non-existent commentable")
end
end
def edit
# TODO: Why does this need a collection of comments?
@comments = @comment.commentable.comments
@commentable = @comment.commentable
end
def create
@comment = Comment.new(comment_params)
@commentable = @comment.commentable
@comment.author = current_member
@comment.save
respond_with @comment, location: @commentable
end
def update
@comment.update(body: comment_params['body'])
respond_with @comment, location: @comment.commentable
end
def destroy
@commentable = @comment.commentable
@comment.destroy
respond_with(@commentable)
end
private
def find_commentable
return unless params[:comment]
case params[:comment][:commentable_type]
when 'Photo'
Photo.find(params[:comment][:commentable_id])
when 'Post'
Post.find(params[:comment][:commentable_id])
when 'Planting'
Planting.friendly.find(params[:comment][:commentable_id])
end
end
def comment_params
params.require(:comment).permit(:body, :commentable_id, :commentable_type)
end
end