레일 애플리케이션에서 STI 패턴을 구현하려고하는데 미쳐 버릴 것입니다. 예를 들어, 슈퍼 클래스를 호출, 나는 서브 클래스의 인스턴스를 얻으려면레일 4.2 STI // 잘못된 캐스팅 (서브 클래스 대신 슈퍼 클래스)
class ApartmentReservation < Reservation
#some code here
end
class StorageReservation < Reservation
#some code here
end
:
슈퍼 클래스 :
class Reservation < ActiveRecord::Base
self.inheritance_column = :inheritance_type
#some code here
end
서브
나는 세 가지 모델이
Reservation.all
은 ApartmentReservation 및 StorageReservation의 컬렉션을 반환해야하지만 Reservation 컬렉션을 반환해야합니다.
나는 대답을 찾고 있었고 개발 환경에서 열심히로드되어 있기 때문에 발견했습니다. 초기화에서
:
require_dependency 'app/models/apartment_reservation'
require_dependency 'app/models/storage_reservation'
: 수퍼 클래스의 바닥에서
def self.descendants
[ApartmentReservation, StorageReservation]
end
:
슈퍼 클래스에서Rails.configuration.to_prepare do
require_dependency 'app/models/apartment_reservation'
require_dependency 'app/models/storage_reservation'
end
충고에 따라, 나는 이러한 코드 부분과 시도를하고 있어요
하지만 여전히 작동하지 않습니다.
아무도 아이디어가 있습니까, 어떻게 작동 시키는가?
이것은 rails server
에 해당하지만, rails console
에는 모든 것이 올바르게 적용됩니다.
무엇 이었는가? –
@SergioTulentsev 첫 번째 메소드는 상태 배열을 반환하고 두 번째는 속성 배열 (ActiveRecord의 columns_hash 메소드 사용)을 반환합니다. –
그 방법을 답안 (또는 그들의 서명)에 넣는 것이 힌트였습니다. –