Проверка названия темы Дискурса

У меня есть функция 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("выберите * из тем, где заголовок похож на" начало заголовка% "). Темы с первым словом в заголовке не существует.

Какие еще проверки могут быть выполнены... что может быть причиной ошибки, когда заголовок темы уже использовался, если темы с этим заголовком не найдены?

Дальнейшая информация

Я попробовал включить дублирование названий. Код прошел без ошибок, но не было разделов с заголовком, которые вызывали ошибку после импорта. Такое ощущение, что сообщение об ошибке неверно.

0 ответов

Другие вопросы по тегам