같은 태그에 동의어를 추가하면 멈춤

여러분 안녕하세요,

실수로 태그 A를 태그 A의 동의어로 추가했습니다 (실수로, 휴대폰에서).

  • 동의어 삭제를 시도하면 500 오류가 발생합니다.
  • 연결 해제 버튼을 누르면 422 오류가 발생합니다.
  • 태그를 삭제하면 알 수 없는 오류가 발생합니다.

참고로,

  • 태그 A를 B로 이름 변경하면 동의어도 함께 수정됩니다.
  • 태그 A가 포함된 게시글이 0개든 1개든 위의 오류에는 차이가 없습니다.

누군가 이 문제를 재현해 볼 수 있을까요?

2개의 좋아요

이런 일이 일어나지 않도록 해야 할 것 같습니다. 아마도 다음과 같은 결과가 나왔을 것입니다:

저는 로컬 개발 사이트에서 이를 테스트하고 있습니다. 동의어를 생성한 후 “동의어 제거” 버튼을 클릭하면 422 오류가 발생합니다. 동의어의 휴지통 아이콘을 클릭하면 500 오류가 발생하지 않고, 대신 태그가 완전히 삭제됩니다.

태그가 자신의 동의어로 설정되는 것을 방지하기 위해 일부 보호 기능이 추가되어야 한다고 생각합니다.

1개의 좋아요

이 문제를 확인해 주셔서 감사합니다.

음, 제 설치 환경과는 다른 것 같습니다. 현재 저에게는 태그나 동의어를 삭제할 방법이 없습니다.

사이트에서 사용하는 Discourse 버전은 무엇인가요?

1개의 좋아요

방금 최신 빌드로 업그레이드했습니다:

2.6.0.beta5 ( 811c610108 )

동작은 제 첫 게시물과 동일합니다.

1개의 좋아요

다음 주에 @eviltrout에게 이 작업을 할당해야 합니다. 태그를 그 자체의 동의어로 추가하는 것은… 좋지 않거든요.

2개의 좋아요

다음 방법으로 수정되었습니다:

이 문제를 보고해 주셔서 감사합니다 @MarcP. :+1:

4개의 좋아요

@MarcP님의 요청에 따라 이 주제를 열었습니다. 콘솔을 통해 시도해도 태그를 삭제할 수 없다고 합니다.

cd /var/discourse
./launcher enter app
rails c

tag = Tag.find_by_name("tag_name")
tag.destroy

위 코드는 저에게는 정상적으로 작동하는데, Marc님에게는 작동하지 않는다고 합니다. Marc님, 여기서 문제 상황을 좀 더 자세히 설명해 주시겠어요?

3개의 좋아요

@techAPJ 님이 보내준 명령어는 나에게 작동하지 않았지만, 다음 링크에서 찾은 (조금 다른) 명령어를 실행했습니다: How can I delete a tag in development database (on local)? - #4 by simon

동일어 태그 "testing"이 있는 “testing” 태그를 삭제하려고 시도한 결과, 다음과 같은 결과를 얻었습니다.

[1] pry(main)> t = Tag.find_by_name('testing')
=> #<Tag:0x000055a268f6f990
 id: 35,
 name: "testing",
 topic_count: 0,
 created_at: Wed, 11 Nov 2020 04:38:06 UTC +00:00,
 updated_at: Thu, 19 Nov 2020 03:44:35 UTC +00:00,
 pm_topic_count: 0,
 target_tag_id: 35>
[2] pry(main)> t.destroy!
SystemStackError: stack level too deep
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.3/lib/active_record/reflection.rb:120:in `_reflect_on_association'
[3] pry(main)>

try:

DB.exec("delete from tags where name = 'testing'")
5개의 좋아요

이렇게 하면 되네요! 샘, 감사합니다 :slight_smile: 좋은 주말 보내세요.

2개의 좋아요