Tôi đang viết trình tạo di chuyển cho một plugin mà tôi đang viết và tôi cần tìm các chỉ mục duy nhất mà bảng có để tôi có thể sửa đổi các chỉ mục duy nhất để trở thành chỉ mục tổng hợp duy nhất. Tôi đã cố gắng để tìm một cách để truy cập vào những gì chỉ mục một bảng có với ActiveRecord. Tôi chỉ có thể tìm ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: chỉ số phương pháp, nhưng tiếc là điều này chỉ có sẵn cho PosgreSQLAdapter. Tôi cần để có thể hỗ trợ các cơ sở dữ liệu lớn khác.ActiveRecord tìm các chỉ mục bảng hiện có
Tôi lần đầu tiên grepping tệp schema.rb để tìm các chỉ mục, điều này làm việc lúc đầu, nhưng tôi sớm nhận ra đây là một chiến lược xấu. Tôi đã nghĩ rằng nếu ActiveRecord không cung cấp một phương tiện để có thể làm điều này cho nhiều bộ điều hợp cơ sở dữ liệu, tôi có thể viết các truy vấn bộ điều hợp cụ thể để lấy thông tin chỉ mục từ một bảng. Nếu tôi cần phải sử dụng phương pháp này thì điều gì sẽ là một cách tốt để xác định bộ điều hợp đang sử dụng?
Nếu ai đó biết cách để ActiveRecord liệt kê thông tin chỉ mục bảng sẽ lý tưởng.
Cách duy nhất tôi có thể nghĩ để làm điều này ngay bây giờ là với sự trợ giúp của ActiveRecord :: SchemaDumper.dump Vấn đề là việc này sẽ lược đồ hiện tại thành $ stdout và tôi không biết cách nắm bắt điều đó và chuyển đổi đầu ra thành chuỗi. Nếu tôi biết điều đó, tôi sẽ có thể sử dụng mã từ cách tiếp cận đầu tiên của tôi về đọc schema.rb. Bất cứ ai cũng biết làm thế nào để nắm bắt $ stdout cho một cái gì đó đã được viết trong một khối? Ví dụ điều này không hoạt động: schema_str = IO :: mở (2) {ActiveRecord :: SchemaDumper.dump} .read –
Tôi nhận ra câu hỏi này là cổ xưa, nhưng tôi đã có cùng một vấn đề cố gắng để có được SchemaDumper để đổ một chuỗi. Cuối cùng tôi đã tìm thấy câu trả lời và tôi sẽ đăng câu trả lời trong trường hợp bất kỳ ai khác có vấn đề này: 'schema_rb_as_string = ActiveRecord :: SchemaDumper.dump (ActiveRecord :: Base.connection, StringIO.new) .string' – MothOnMars