(Ruby) Selecting only posts that are made by non-original posters

Hey everyone!

I have started volunteering for a community recently and I am tasked with updating an existing plugin. This plugin currently changes a topics tag when it reaches a certain word count threshold. I am supposed to convert this to only count words from posts in the topic that are not from the topic’s creator.

Currently, the word count is achieved by this snippet:

replies = topic.posts.where('post_number > 1')
reply_word_count = replies.sum(:word_count)

I’m thinking the strategy for this will be:

non_op_replies = topic.posts.where('post.user.username != topic.user.username')
reply_word_count = non_op_replies.sum(:word_count)

But this doesn’t seem to work. I have been fiddling around with the syntax for a while and can’t seem to get a working plugin out of it. I have been trying to find documentation for developing in Discourse with Ruby and I am coming up short. I would love if someone is able to help me out or point me in the right direction. I’m also new to Ruby so sorry in advance if it’s just a silly error.

2 Likes

Welcome aboard! :partying_face:

I’m also a beginner at Ruby, and I’ve found this tutorial really helpful to start off with.

Here’s a 7-part series on developing Discourse plugins, although it may not have exactly what you’re looking for, but it’s a good resource to help understand how a Discourse plugin is structured.

Personally, I learn best by example and logging each step of the way, so Rails.logger, along with Discourse’s logster, which you can access via localhost:3000/logs, are really helpful in doing that.

Here lies the Ruby documentation for Discourse core, if you are feeling brave and want to explore on your own.

4 Likes

Thank you for your help! I’ll take a look at these right away.

3 Likes