Skip to content

Add comments export#2

Open
benjaminwols wants to merge 2 commits intomainfrom
export
Open

Add comments export#2
benjaminwols wants to merge 2 commits intomainfrom
export

Conversation

@benjaminwols
Copy link
Owner

No description provided.

Copy link

@maxpohlmann maxpohlmann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good all in all already! I don't think it's working quite right, yet. I'm getting (public) comments on archived posts in the export. Could you look into that again?

Also, maybe you can add an (integration) controller test as well?

module Export
class CommentsController < ApplicationController
def index
comments = Comment.joins(:post).where(status: "public", comments: {status: "public"})

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

status: "public" also checks the comment's status:

 _ = Comment.joins(:post).where(status: "public", comments: {status: "public"})
  Comment Load (0.4ms)  SELECT "comments".* FROM "comments" INNER JOIN "posts" ON "posts"."id" = "comments"."post_id" WHERE "comments"."status" = ? AND "comments"."status" = ?  [["status", "public"], ["status", "public"]]

Perhaps you meant to write this?

Suggested change
comments = Comment.joins(:post).where(status: "public", comments: {status: "public"})
comments = Comment.joins(:post).where(status: "public", posts: {status: "public"})

This should explain why I'm getting comments of archived posts in the export.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's talk about what "visible" means. Private comments on private posts are also visible on the website.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a select/pluck to make sure that we're only loading data we actually need, to reduce database-application traffic.

Suggested change
comments = Comment.joins(:post).where(status: "public", comments: {status: "public"})
comments = Comment.joins(:post).where(status: "public", posts: {status: "public"}).pluck(:'posts.title', :'comments.author', :'comments.body')

include Visible
belongs_to :post

def self.to_csv

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't that define a class method? How does calling comments.to_csv work then? Perhaps some Rails magic? :D

def self.to_csv
CSV.generate do |csv|
csv << ["Post title", "Comment author", "Comment body"]
all.each do |comment|

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does all reference what this method was called on or does it call a method getting everything? It seems to be the latter, but can you please explain to me how it works?


def self.to_csv
CSV.generate do |csv|
csv << ["Post title", "Comment author", "Comment body"]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a nitpick, but the case gave the header in lowercase. Relevant if it's supposed to be machine-processed at some point.


<div class="row" style="margin-bottom: 12px;">
<div class="col-md-4 col-xs-8 col-xs-offset-2">
<%= link_to "Export", export_comments_path(format: 'csv'), class: "btn btn-primary" %>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

format: 'csv' doesn't have any effect at the moment, right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants