Ruby on Rails 3.0 ile salt okunur bir veritabanı üzerinde çalışıyorum (oracle_enhanced_adapter aracılığıyla bağlanıyor).Rails 3 ve Oracle: NLS Ayarları ondalık ayırıcıyı reddediyor
Bilinen "n + 1 sorguları" sorunuyla çalışırken, dahil yöntemini denedim.
Raylar'daki açıklamadan farklı olarak üretilen ikinci sorgu, gerekli kimliklerin tamsayı olarak değil, kayan değerlerin dize halinde temsilleri olarak listelenir. Orijinal kimlikleri NUMBER. Ne yazık ki NLS ayarları, ondalık ayırıcı olarak "," beklediği NLS_NUMERIC_CHARACTERS
da dahil olmak üzere Almanya için geçerlidir. Bu yüzden her zaman ORA-01722 hata as described here olsun. Daha doğrusu
:
@var.assoc.includes(:another_assoc).where("column_1 = ?", some_value)
verimleri
(o "sembole dize" gibi bazı rahatsız edici detaylar içeriyordu beri, yukarıdaki Raylı kodu basitleştirmek zorunda dönüşüm)ActiveRecord::StatementInvalid: OCIError: ORA-01722: invalid number: SELECT "TABLE_A".* FROM "TABLE_A" WHERE ("TABLE_A"."ID" IN ('1715.0','1716.0','1717.0','1718.0','1719.0','1720.0','1721.0'))
Veritabanından da anlaşılacağı gibi,
Veritabanında doğrudan çalıştı (. Ancak raylar oturumunu değiştirmenin doğru yolunu bulamadım.
Bulduğum her şey, Rails 2'ye veya kullanımdan kaldırılmış işlevlere başvurmuş gibiydi.
Rails 3.0 için bunu nasıl çözebilirim?
Alternatif olarak: Tüm listelenen kimlikleri Fixnum'a dönüştürmek için Rails'i (veya belki de oracle_enhanced_adapter) nasıl zorlayabilirim?
Teşekkür ve saygılarımla, Tim
Biz Oracle kullanarak aynı problem vardı ve biz bir başlatıcısı (config/initializers/something.rb
yerleştirin) aşağıdaki kodu yerleştirerek onu çözdü
Merhaba Tim, stackoverflow'a hoş geldiniz. Bu ifadeyi oluşturan ray kodunu gönderir misiniz? – Patrick