मैं इस तरह एक ActiveRecord मॉडल है:क्या रेल-एक्टिव रिकॉर्ड्स माइग्रेशन के माध्यम से फ़ंक्शन-आधारित डेटाबेस-अज्ञेय अनुक्रमणिका को जोड़ना संभव है?
create_table "books" do |t|
t.string "title"
end
class Book < ActiveRecord::Base
default_scope :order => 'lower(title) DESC'
end
आप देख सकते हैं मैं title
विशेषता का लोअरकेस रूप से क्रमबद्ध करना चाहते हैं, लेकिन यह एक प्रदर्शन डेटाबेस स्तर पर मारा लगाता है के रूप में। इस हिट को विभिन्न डेटाबेस के साथ विभिन्न तरीकों से उपचार किया जा सकता है। उदाहरण के लिए, PostgreSQL या Oracle में आप एक समारोह आधारित सूचकांक बनाने के लिए:
CREATE INDEX lowercase_book_title_index ON book (lower(title));
SQLite3 समारोह आधारित अनुक्रमित नहीं है तो आप एक मिलान निर्दिष्ट करने के लिए है:
CREATE INDEX lowercase_book_title_index ON book (title COLLATE NOCASE);
मुझे नहीं है यह देखा कि आप इसे MySQL के साथ कैसे करते हैं लेकिन मुझे यकीन है कि एक तरीका है (collations? वर्चुअल कॉलम?)।
किसी भी घटना में मैं डेटाबेस-अज्ञेय प्रवासन के साथ उचित रेल फैशन में ऐसा करना चाहता हूं। मैं निश्चित रूप से इस तरह एक साधारण सूचकांक बना सकता हूं:
add_index :books, :title
लेकिन यह उत्पन्न सूचकांक केस-संवेदी है। मुझे एहसास है कि मैं डेटाबेस-निर्भर माइग्रेशन लिख सकता हूं, लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है। यह व्यावहारिक भी नहीं है - मैं अक्सर अपने विकास कार्यस्थानों और उत्पादन में PostgreSQL पर SQLite3 का उपयोग कर खुद को पाता हूं। इंडेक्स नाम, विशिष्टता, और लंबाई के साथ add_index सौदा के लिए उपलब्ध विकल्प। क्या मैं यहां जो करने की कोशिश कर रहा हूं उसे पूरा करने के लिए एक तरीका देख रहा हूं?
सीधे आपके प्रश्न से संबंधित नहीं है, लेकिन उत्पादन में SQLite का उपयोग करके और उत्पादन में PostgreSQL का उपयोग बहुत दुख का कारण बनता है। (यह Heroku उपयोगकर्ताओं को बहुत काटता है। ए * बहुत *।) PostgreSQL भी मुफ़्त है, इसलिए यह वास्तव में SQLite के खिलाफ विकसित करने के लिए समझ में नहीं आता है। –
यह मेरे लिए आश्चर्यजनक रूप से दर्द रहित है, बशर्ते मैंने ActiveRecord को SQL लिखने दें। यह तब नहीं था जब मैं MySQL के खिलाफ विकास कर रहा था और फिर PostgreSQL पर तैनात किया गया था। – Sven