2013-10-17 19 views
11

isolate_namespace yöntemini önekli tablo adlarını kullanmamak için bir yöntem var mı?Isolate_namespace ile monte edilebilir motoru ancak tablolarda öntanımlı ad alanı olmadan raylar

class Engine < ::Rails::Engine 
    isolate_namespace MyEngine 
end 

Ayrıca, izole bir motor böylece MyEngine, ad göre adını koyacaktır :: Engine.engine_name “my_engine” olacaktır. Ayrıca MyEngine.table_name_prefix öğesini my_engine_articles tablosunu kullanmak için MyEngine :: Article modelini değiştirerek “my_engine_” olarak ayarlayacaktır.

Isolated Engine Docs Ben izole ad deseni kullanmak yolları gereken bir sorunla karşılaştım bir prototip tasarımı, ancak veritabanı tabloları yok. Bunun nedeni, yazdığım takılabilir motorun kendi kendine yeten veritabanına sahip olmasıdır.

Mümkün değil ise daha fazla kazmak istemiyorum.

cevap

21

Rails Engine kod tabanına bir çözüm bulmak için biraz arandı. Tablo adı önekini belirtmek için bir yöntem tanımlarsanız (/lib/my_engine.rb'da), yalnızca bunun yerine kullanır. Yani geri dönen nil iyi çalışır.

require "my_engine/engine" 

module MyEngine 
    # Don't have prefix method return anything. 
    # This will keep Rails Engine from generating all table prefixes with the engines name 
    def self.table_name_prefix 
    end 
end 
+1

Yöntemi sınıf tanımının dışında ve modül blokunda cevapta olduğu gibi tuttuğunuzdan emin olun. – Hopstream

+0

@keaplogik. Çok teşekkürler. Bu bana çok sıkıntı verdi. Keşke bir kereden fazla kazanabilseydim. – ManojGumber

+0

Evet, bu işe yarıyor. Ana uygulama ile karıştırılmayı istemediğinizden merak ettiğinizden, motorunuzun geçişlerini nasıl ele alıyorsunuz? – Donato