토픽 커스텀 필드가 topics 모델에 컬럼을 추가하나요? 추가되지 않는다는 오류가 발생하고 있어서 어떻게 해야 할지 고민 중입니다.
개발 환경에서 여기의 가이드를 따라 토픽 커스텀 필드를 생성했습니다. 이를 fun_level이라고 부르겠습니다. 커스텀 필드는 개발 환경에서 정상적으로 생성된 것 같습니다. 커스텀 필드를 추가한 후 생성한 토픽을 가져오기 위해 ajax("/t/112.json")와 같은 ajax 호출을 수행하면, 입력한 값이 포함된 fun_level 필드가 토픽 데이터에 함께 반환되기 때문입니다.
하지만 이제 특정 커스텀 필드 값을 가진 모든 토픽을 프로그래매틱하게 검색하는 방법을 찾아야 합니다. (예: fun_level이 'super-duper-fun’인 모든 토픽 목록 가져오기)
또 다른 방법으로는 클래식 Rails 방식을 사용하는 것을 생각해 보았습니다. 컨트롤러를 생성하고, 특정 경로(/fun_levels/:fun_level)로 이동할 때 다음과 같은 show 메서드를 호출하는 방식입니다:
def show
respond_to do |format|
format.json { render json: Topic.where(fun_level: 'super-duper-fun') }
end
end
그리고 ajax("/fun_levels/super-duper-fun.json")를 호출합니다…
이 컨트롤러 show 메서드/ajax 호출 전략은 id, 제목 등을 기준으로 토픽을 찾을 때는 잘 작동합니다. 하지만 위의 코드(Topic.where(fun_level: 'super-duper-fun))를 사용하면 internal server error가 발생합니다. 로그에는 다음과 같은 내용이 표시됩니다:
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column topics.fun_level does not exist LINE 1: ... "topics" WHERE "topics"."deleted_at" IS NULL AND "topics"."...
위에서 제공한 것처럼 컨트롤러 메서드를 사용하여 커스텀 필드를 기준으로 토픽을 가져오는 방법이 있을까요? (예: { render json: Topic.where(fun_level: 'super-duper-fun') }처럼)
TopicCustomField 모델이 있습니다. 바로 그걸 사용하세요. Topic List Previews (legacy) 또는 주제(topic)를 조작하는 다른 플러그인을 참고해 보시길 권합니다. 아니면 discourse 코어에서 HasCustomFields를 찾아보시는 것도 좋습니다.