mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-04-11 10:28:45 -04:00
This change introduces polymorphic comments, allowing you to comment on Photos, Plantings, Harvests, and Activities, in addition to Posts.
Key changes include:
- **Comment Model:**
- Made `Comment.commentable` a polymorphic association.
- Added a data migration to move existing post comments to the new structure.
- Updated notification creation logic for polymorphic commentables.
- **CommentsController:**
- Refactored to handle various commentable types using a `find_commentable` method.
- **Ability Model:**
- Updated permissions for comment creation, editing (author/admin), and deletion (author/commentable owner/admin).
- **Routes:**
- Added nested comment routes for Photos, Plantings, Harvests, Activities, and Posts using a `commentable` concern with shallow routes.
- **Views:**
- Created generic partials for comment forms (`_form.html.haml`) and display (`_comment.html.haml`, `_comments.html.haml`).
- Integrated these partials into the show pages of all commentable types.
- Updated `comments/new` and `comments/edit` views to be generic.
- Relevant parent controller `show` actions now eager-load comments.
- **Testing:**
- Added extensive model, controller (using shared examples), and feature tests to cover the new polymorphic comment functionality, including permissions and UI interactions for all commentable types.
- Updated and created factories as needed.
This fulfills the issue requirements for adding comments to multiple resource types with appropriate permissions.
32 lines
758 B
Ruby
32 lines
758 B
Ruby
# frozen_string_literal: true
|
|
|
|
FactoryBot.define do
|
|
factory :comment do
|
|
association :author, factory: :member # Explicitly use :member factory for author
|
|
sequence(:body) { |n| "OMG LOL #{n}" }
|
|
|
|
# Default to associating with a post if no specific commentable is provided
|
|
association :commentable, factory: :post
|
|
|
|
trait :for_post do
|
|
association :commentable, factory: :post
|
|
end
|
|
|
|
trait :for_photo do
|
|
association :commentable, factory: :photo
|
|
end
|
|
|
|
trait :for_planting do
|
|
association :commentable, factory: :planting
|
|
end
|
|
|
|
trait :for_harvest do
|
|
association :commentable, factory: :harvest
|
|
end
|
|
|
|
trait :for_activity do
|
|
association :commentable, factory: :activity
|
|
end
|
|
end
|
|
end
|