Böyle bir ActiveRecord modeli var:Rails/ActiveRecord geçişi yoluyla işlev tabanlı bir veritabanı tanılama dizini eklenebilir mi?
create_table "books" do |t|
t.string "title"
end
class Book < ActiveRecord::Base
default_scope :order => 'lower(title) DESC'
end
ben title
özelliğin küçük forma göre sıralamak istiyorum görebilirsiniz, ancak bu veritabanı düzeyinde vurmak bir performans getirir gibi. Bu isabet farklı veri tabanları ile farklı şekillerde düzeltilebilir. Örneğin, PostgreSQL Oracle'da bir fonksiyon tabanlı bir dizin oluşturun:
CREATE INDEX lowercase_book_title_index ON book (lower(title));
Bir harmanlama belirtmek zorunda SQLite3 fonksiyonu tabanlı endekslere sahip değildir
:
CREATE INDEX lowercase_book_title_index ON book (title COLLATE NOCASE);
I have not MySQL ile nasıl çalıştığınıza baktım ama eminim ki bir yol var (harmanlamalar? sanal sütunlar?).
Her halükarda bunu bir veritabanı-agnostik göçle uygun Rails tarzında yapmak istiyorum.
add_index :books, :title
Ama bu üretir endeks harf duyarlıdır: Tabii bu gibi basit bir dizin oluşturabilirsiniz. Veritabanına bağımlı bir göçü yazabileceğimin farkındayım, ama çok zarif değil. Aynı zamanda pratik değil - Kendimi geliştirme iş istasyonlarımda ve PostgreSQL'te SQLite3'ü kullanarak buluyorum. Dizin adı, teklik ve uzunluk ile add_index anlaşması için kullanılabilir seçenekler. Burada yapmaya çalıştığım şeyi başarmanın bir yolunu mu görüyorum?
Sorunuzla doğrudan ilgili olmayan, ancak geliştirme ve PostgreSQL'te SQLite kullanmak üretimde çok fazla keder yaratıyor. (Bu, Heroku kullanıcılarını çok ısırır. A * lot *.) PostgreSQL de ücretsiz olduğu için, SQLite'ye karşı geliştirmek gerçekten mantıklı değildir. –
ActiveRecord'ın SQL yazmasına izin vermemi sağlayarak bana şaşırtıcı bir şekilde acı vermedi. MySQL'e karşı geliştirdiğimde ve PostgreSQL'e dağıtmak zorunda kaldığımda durum böyle değildi. – Sven