-
Notifications
You must be signed in to change notification settings - Fork 0
Add comments export #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
module Export | ||
class CommentsController < ApplicationController | ||
def index | ||
comments = Comment.joins(:post).where(status: "public", comments: {status: "public"}) | ||
respond_to do |format| | ||
format.csv { send_data comments.to_csv, filename: "comments-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv"} | ||
end | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,15 @@ | ||
require 'csv' | ||
|
||
class Comment < ApplicationRecord | ||
include Visible | ||
belongs_to :post | ||
|
||
def self.to_csv | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doesn't that define a class method? How does calling |
||
CSV.generate do |csv| | ||
csv << ["Post title", "Comment author", "Comment body"] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. |
||
all.each do |comment| | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does |
||
csv << [comment.post.title, comment.author, comment.body] | ||
end | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,12 @@ | |
|
||
<h1 align="center">Listing all articles</h1> | ||
|
||
<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" %> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
</div> | ||
</div> | ||
|
||
<% @posts.each do |post| %> | ||
<%unless post.archived?%> | ||
<div class="row"> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,4 +12,8 @@ | |
resources :posts do | ||
resources :comments | ||
end | ||
|
||
namespace :export do | ||
resources :comments, only: :index | ||
end | ||
end |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,13 @@ | ||
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html | ||
|
||
one: | ||
author: MyString | ||
body: MyText | ||
author: Author | ||
body: Body | ||
post: one | ||
status: public | ||
|
||
two: | ||
author: MyString | ||
body: MyText | ||
post: two | ||
status: private |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,11 @@ | ||
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html | ||
|
||
one: | ||
name: MyString | ||
age: 1 | ||
occupation: MyString | ||
# one: | ||
# name: MyString | ||
# age: 1 | ||
# occupation: MyString | ||
|
||
two: | ||
name: MyString | ||
age: 1 | ||
occupation: MyString | ||
# two: | ||
# name: MyString | ||
# age: 1 | ||
# occupation: MyString |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
require "test_helper" | ||
|
||
class CommentTest < ActiveSupport::TestCase | ||
# test "the truth" do | ||
# assert true | ||
# end | ||
test "to csv" do | ||
assert_equal( | ||
"Post title,Comment author,Comment body\nTitle1,Author,Body\n", | ||
posts(:one).comments.to_csv | ||
) | ||
end | ||
end |
There was a problem hiding this comment.
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:Perhaps you meant to write this?
This should explain why I'm getting comments of archived posts in the export.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.