FIX: Never return the same reply more than once via reply_ids
If our reply tree somehow ends up with cycles or other odd structures, we only want to consider a reply once, at the first level in the tree that it appears.
This commit is contained in:
parent
7640914552
commit
37888d9818
|
@ -834,9 +834,10 @@ class Post < ActiveRecord::Base
|
||||||
WHERE r.reply_post_id <> r.post_id
|
WHERE r.reply_post_id <> r.post_id
|
||||||
GROUP BY id, level
|
GROUP BY id, level
|
||||||
)
|
)
|
||||||
SELECT id, level
|
SELECT id, MIN(level) AS level
|
||||||
FROM breadcrumb_with_count
|
FROM breadcrumb_with_count
|
||||||
/*where*/
|
/*where*/
|
||||||
|
GROUP BY id
|
||||||
ORDER BY id
|
ORDER BY id
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
|
|
|
@ -956,6 +956,11 @@ describe Post do
|
||||||
expect(p1.reply_ids).to be_blank
|
expect(p1.reply_ids).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "doesn't include the same reply twice" do
|
||||||
|
PostReply.create!(post: p4, reply: p1)
|
||||||
|
expect(p1.reply_ids.size).to eq(4)
|
||||||
|
end
|
||||||
|
|
||||||
it "does not skip any replies" do
|
it "does not skip any replies" do
|
||||||
expect(p1.reply_ids(only_replies_to_single_post: false)).to eq([{ id: p2.id, level: 1 }, { id: p4.id, level: 2 }, { id: p5.id, level: 3 }, { id: p6.id, level: 2 }])
|
expect(p1.reply_ids(only_replies_to_single_post: false)).to eq([{ id: p2.id, level: 1 }, { id: p4.id, level: 2 }, { id: p5.id, level: 3 }, { id: p6.id, level: 2 }])
|
||||||
expect(p2.reply_ids(only_replies_to_single_post: false)).to eq([{ id: p4.id, level: 1 }, { id: p5.id, level: 2 }, { id: p6.id, level: 1 }])
|
expect(p2.reply_ids(only_replies_to_single_post: false)).to eq([{ id: p4.id, level: 1 }, { id: p5.id, level: 2 }, { id: p6.id, level: 1 }])
|
||||||
|
|
Loading…
Reference in New Issue