У меня есть функция ruby, которая создает тему для обсуждения, если заголовок не найден.
def get_topic(user,title,created_at,bumped_at,last_posted_at,excerpt)
title = title.gsub(/ /,' ')
puts "get_topic.title:'#{title}' user.id:#{user.id} created_at:#{created_at} last_posted_at:#{last_posted_at} excerpt:#{excerpt}"
result = Topic.find_by_title(title)
if result == nil then
result = Topic.create
result.title = title
result.fancy_title = title
result.user_id = user.id
result.last_post_user_id = user.id
result.updated_at = last_posted_at
result.created_at = created_at
result.bumped_at = bumped_at
result.last_posted_at = last_posted_at
result.excerpt = excerpt
result.save!
else
puts result
puts created_at,bumped_at,last_posted_at
if result.user_id != user.id then
result.user_id = user.id
result.last_post_user_id = user.id
end
if result.updated_at != last_posted_at then
result.updated_at = last_posted_at
end
if result.created_at != created_at then
result.created_at = created_at
end
if result.bumped_at != bumped_at then
result.bumped_at = bumped_at
end
if result.last_posted_at != last_posted_at then
result.last_posted_at = last_posted_at
end
if result.excerpt != excerpt then
result.excerpt = excerpt
end
if result.changed.length > 0 then
result.save!
puts result.slug
post = result.first_post
post.created_at = created_at
post.updated_at = result.updated_at
post.baked_at = result.bumped_at
post.last_version_at = result.last_posted_at
post.user_id = result.user_id
post.last_editor_id = result.user_id
post.raw = result.excerpt
post.save!
puts post
#puts user.id
end
end
puts "get_topic.result.slug:#{result.slug}"
return result
end
Прежде чем код создает тему, он ищет заголовок.title = title.gsub (/ /, '') result = Topic.find_by_title (title) Если возникает нулевой результат, он создает тему.
Это работает для большинства тем, однако для одного заголовка выбрасываетсяActiveRecord :: RecordInvalid: проверка не удалась: заголовок уже использовался при сохранении темы.
Параметры проверки для topic.title:
validates :title, if: Proc.new { |t| t.new_record? || t.title_changed? },
presence: true,
topic_title_length: true,
censored_words: true,
quality_title: { unless: :private_message? },
max_emojis: true,
unique_among: { unless: Proc.new { |t| (SiteSetting.allow_duplicate_topic_titles? || t.private_message?) },
message: :has_already_been_used,
allow_blank: true,
case_sensitive: false,
collection: Proc.new { Topic.listable_topics } }
Я проверил в консолииспользуя Topic.find_by_title ('title').Нет тем с заголовком.Я проверил с помощью Topic.find_by_sql ("выберите * из тем, где заголовок похож на" начало заголовка% "). Темы с первым словом заголовка не существует.
Какие другие проверки могут быть выполнены ... что может быть причинойошибка, говорящая о том, что заголовок темы уже использовался, если не найдено тем с таким заголовком?
Дополнительная информация
Я попытался разрешить дублирование заголовков. Кодпробежал без ошибок, но не было тем с заголовком, который вызывал ошибку после импорта. Такое ощущение, что сообщение об ошибке неверное.