2012-11-20 2 views
1

단일 테이블 상속에 사용되는 유형 열이있는 레거시 데이터베이스와 상호 작용하는 앱을 개발 중입니다. 이 데이터베이스는 기존 PHP 응용 프로그램에서 계속 사용되므로 거기에있는 작업을해야합니다. 나는 이것을 위해 몇몇 모델을 설정하려고 노력하고 있는데 키 테이블 중 하나는 STI 스키마와 타입 컬럼으로 설정되어있다. 그러나 그 컬럼의 모든 타입은 완전히 소문자이다.소문자 유형 이름을 사용하여 단일 테이블 상속

필자가 지금까지 테스트 한 결과 클래스 이름 (예 : 청구자 대신 청구자)과 일치하도록 값을 변경하면 레일스가 유형 열과 잘 작동합니다. 그러나 프로덕션 데이터베이스에서이 값을 변경하는 것은 좋을 지 모르지만, 레거시 앱을 수정하여 이름을 다르게 저장해야 할 필요는 없습니다 ...

이 문제를 해결하려면 두 가지 질문이 있습니다.

1) 모델을 구성하여 'claimant'클래스가 'Claimant'클래스로 매핑되도록 구성 할 수 있습니까?

2)이 경우 유형 열이 있어도이 테이블에서 STI를 사용하지 않도록 레일을 말할 수있는 방법이 있습니까? 내가 STI 설정이 시도하지 않은,하지만 기존의 테이블을 사용할 때이 방법을 사용할 수 있었다

답변

0

나는 약간의 인터넷 검색을 해봤 아직 많이 마련하지 않은 ... "set_table_name"은 ActiveRecord 모델에 있습니다.

class Claimant < ActiveRecord::Base 
    set_table_name 'claimant' 
end 

또는 사용자 정의 방법

:

def table_name 
    'claimant' 
end 

사과 나는이에 대한 테스트 편리 성병 표를 얻었으나, 그것은 당신의 문제를 해결하는 데 도움이 될 생각하지 않았습니다.

질문의 두 번째 부분에 대한 대답으로, 존재하지 않는 열 이름을 지정하여 유형 열을보고 레일스를 비활성화 할 수 있다고 생각합니다.

class Claimant < ActiveRecord::Base 
    inheritance_column = :_type_column_disabled 
end 
관련 문제