FIX: Don't raise an exception if a TopicLink cannot be created

This can happen under concurrency and it's fine. If a `TopicLink`
already exists we can continue on without raising an error.
This commit is contained in:
Robin Ward 2020-05-12 11:14:57 -04:00
parent 0344ad14c1
commit 088c11a12c

View File

@ -213,16 +213,18 @@ class TopicLink < ActiveRecord::Base
unless TopicLink.exists?(topic_id: post.topic_id, post_id: post.id, url: url)
file_extension = File.extname(parsed.path)[1..10].downcase unless parsed.path.nil? || File.extname(parsed.path).empty?
begin
TopicLink.create!(post_id: post.id,
user_id: post.user_id,
topic_id: post.topic_id,
url: url,
domain: parsed.host || Discourse.current_hostname,
internal: internal,
link_topic_id: topic&.id,
link_post_id: reflected_post.try(:id),
quote: link.is_quote,
extension: file_extension)
TopicLink.create(
post_id: post.id,
user_id: post.user_id,
topic_id: post.topic_id,
url: url,
domain: parsed.host || Discourse.current_hostname,
internal: internal,
link_topic_id: topic&.id,
link_post_id: reflected_post.try(:id),
quote: link.is_quote,
extension: file_extension
)
rescue ActiveRecord::RecordNotUnique
# it's fine
end