복잡한 도메인을 모델링하기 위해 Rails STI를 사용하고 있습니다. 결국 서브 클래스 서브 클래스의 바로 인스턴스에 대한 개별 "인덱스"페이지로 연결되는 링크의 각 레이블을 만들 목적으로레일 STI, 서브 클래스가 사용되지 않는 한 나타나지 않습니까?
> <% StateDescription.subclasses.each do |state_description| %> <li>
> <%= state_description.to_s %> </li> <% end %>
: 뷰에서 나는 모든 서브 클래스를 나열하고있다.
이렇게하면 모든 가능한 하위 클래스 목록을 가져 가지 않아도됩니다. (나중에 추가하면 나중에 업데이트됩니다.)
그러나 데이터베이스에서 실제로로드 한 하위 클래스 만 목록에 표시된다는 것을 알고 있습니다. StateDescription.all을 말하면, 모든 기존 서브 클래스가 나타납니다 (그러나 인스턴스가없는 것은 없습니다). 그 대신에 특정 서브 클래스 모두를 요구하면 그 서브 클래스 만 표시됩니다.
이것은 내가 들었던 "게으른로드"의 일부라고 상상해보십시오. 그렇지? 문제가 발생하면 데이터베이스에서 특정 "유형"을 가져 오지 않으면 해당 모델이 있어도 존재하지 않을 수 있습니다.
이 문제를 해결할 수있는 방법이 있습니까? 아니면 내가 만드는 모든 하위 클래스에 대한 링크를 작성해야합니까?
편집 : 콘솔에서
, 나는 다음 StateDescription.all 다음 StateDescription.subclasses을 할 경우
StateDescription.subclasses.count이
내가 0
를 얻을 입력하면 .count, 나는 14가된다.
시도'StateDescription.descendants'은 참조하십시오. 그 방법에 익숙하지 않아 왜 당신의 질문에 직접적으로 대답 할 수는 없지만, 게으른 로딩에 대한 당신의 생각은 옳을 수 있습니다. –
.descendants는 슬프게도 똑같은 동작을합니다. – Jenny
예, 게시 한 후에'# subclasses'가 실제로'# descendants' 메서드를 사용한다는 것을 알았습니다. 그것을 무시하십시오. 내 대답이 전혀 도움이됩니까? –