필자가 쓰는 플러그인의 마이그레이션 생성기를 작성 중이며 고유 한 인덱스가 테이블에 있는지 확인할 수 있어야 기존 고유 인덱스가 복합 고유 인덱스가 될 수 있습니다. ActiveRecord를 사용하여 테이블에있는 인덱스에 액세스하는 방법을 찾으려고했습니다. ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: indexes 메서드 만 찾을 수 있었지만 불행히도 PosgreSQLAdapter에서만 사용할 수 있습니다. 다른 주요 데이터베이스를 지원할 수 있어야합니다.ActiveRecord 기존 테이블 인덱스를 찾는
먼저 schema.rb 파일을 grepping하여 색인을 찾았습니다. 처음에는이 방법이 유용했지만 곧 이것이 나쁜 전략이라는 것을 깨달았습니다.
ActiveRecord가 여러 데이터베이스 어댑터에서이 작업을 수행 할 수있는 방법을 제공하지 않는다면 어댑터 별 쿼리를 작성하여 테이블에서 인덱스 정보를 검색 할 수 있다고 생각했습니다. 이 방법을 사용해야 할 경우 사용중인 어댑터를 판별하는 좋은 방법은 무엇입니까?
이상적인 테이블 인덱스 정보를 나열하는 ActiveRecord를 얻는 방법을 알고있는 사람.
있는 유일한 방법은의 도움을받는 것이다 액티브 :: SchemaDumper.dump 문제는이 $의 표준 출력으로 현재 스키마 덤프와 내가 그 캡처하는 방법을 모르고 있다는 것입니다 출력을 문자열로 변환합니다. 내가 알았다면, 나는 schema.rb를 읽는 첫 번째 접근법에서 코드를 사용할 수있을 것이다. 누구든지 블록에 쓴 글에 대해 $ stdout을 캡처하는 방법을 알고 있습니까? 예를 들어,이 작동하지 않습니다. schema_str = IO :: open (2) {ActiveRecord :: SchemaDumper.dump} .read –
이 질문은 고대 있지만 실현하려면 정확한 동일한 문제가 덤프 SchemaDumper 얻으려고 문자열. 마침내 그 해답을 찾았습니다. 다른 사람이이 문제를 가지고있는 경우를 대비해서 게시 할 것입니다 :'schema_rb_as_string = ActiveRecord :: SchemaDumper.dump (ActiveRecord :: Base.connection, StringIO.new) .string' – MothOnMars