Проверка названия темы Дискурса - PullRequest
0 голосов
/ 03 января 2019

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

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

Дополнительная информация

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

...