mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 01:47:22 +08:00
FIX: no error when double save post with poll (#13111)
Some plugins hook into Post after save to set custom fields and save again. For example: https://github.com/discourse/discourse-category-experts/blob/main/lib/category_experts/post_handler.rb#L27 Problem is that in case like that `raw_changed?` is false but all callback are triggered. `extracted_polls` is class atribute therefore that should be reset with each attempt. That was causing an error: ``` #<ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_polls_on_post_id_and_name" DETAIL: Key (post_id, name)=(8967, poll) already exists. ```
This commit is contained in:
parent
e18d03a301
commit
942b9126a1
|
@ -467,6 +467,7 @@ after_initialize do
|
||||||
|
|
||||||
after_save do
|
after_save do
|
||||||
polls = self.extracted_polls
|
polls = self.extracted_polls
|
||||||
|
self.extracted_polls = nil
|
||||||
next if polls.blank? || !polls.is_a?(Hash)
|
next if polls.blank? || !polls.is_a?(Hash)
|
||||||
post = self
|
post = self
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,10 @@ describe ::DiscoursePoll::Poll do
|
||||||
|
|
||||||
expect(poll.post).to eq(post)
|
expect(poll.post).to eq(post)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "is not throwing an error when double save" do
|
||||||
|
post = Fabricate(:post, raw: "[poll]\n- A\n- B\n[/poll]")
|
||||||
|
expect { post.save! }.not_to raise_error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user