2010-05-21 4 views
13

Rails motorunu kullanıyorum ancak bazı denetleyicilerin eylemlerini özelleştirmem gerekiyor.Rails Engine denetleyicisi eylemini geçersiz kılmak

Aslında motoru patlattım ve bu özelleştirmeleri kendi çatalıma yerleştirdim, ancak Rails Engines'de denetleyicileri geçersiz kılmak ve özelleştirmek için resmi bir yol olup olmadığını merak ediyordum.

+0

http://stackoverflow.com/questions/5045068/extending-controllers-of-a-rails-3-engine-in-the-main-app adresine bir göz atın – Andrei

cevap

18

Sadece kendi adınıza app\controllers klasörünüzde aynı adla bir denetleyici tanımlayın ve önce bulunacak. Bu şekilde kolayca özelleştirebilirsiniz.

Lütfen dikkat: önce bulunur, çünkü tüm denetleyiciyi motordan değiştirirsiniz. Bu tam olarak istediğin şey olabilir. Bazı durumlarda, sadece biraz ayar yapmak istersiniz, sonra sınıfı yeniden açmak çok daha iyidir ve sadece neyin gerekli olduğunu yeniden tanımlayın. yapmak

örnekleri burada bulabilirsiniz edilir: Kabul Yanıtta http://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers

+0

Özel bir çatalın hazırlanmasından çok daha kolay! Teşekkürler ve topal soru için özür dilerim! –

+0

Bu, yalnızca bir eylemi değil, tüm denetleyiciyi geçersiz kılar. –

+0

Aksini iddia etmedim. Ama en azından bunu özelleştirebilirsiniz. Daha iyi bir çözümün var mı? – nathanvda

2

bağlantısı aslında bir denetleyici geçersiz için bir örnek sağlamaz. Dosyayı "açık sınıflandırma" dan söz ediyorlar, ancak bunun nasıl yapılacağını açıklamıyorlar. Uygulamanızda motor sınıfını açarsanız, şu anda tanımlanma sürecinde olan bir sınıfa başvurduğunuz/açtığınız için bir döngüsel bağımlılık hatası alırsınız. Bu nedenle, önce motorun gerçek sınıfını yüklediğinizden emin olmanız gerekir. Benim durumumda

# in my app 
# app/controllers/blazer/base_controller.rb 
load Blazer::Engine.root.join('app/controllers/blazer/base_controller.rb') 
Blazer::BaseController.class_eval do 
    filter_access_to :all 
end 

, ben Blazer gem kullanarak ve ona kimlik ekliyorum. Blazer'ın doğrudan desteklemediği bildirimsel yetkilendirmeyi kullandığımdan, Blazer'ın temel denetleyicisini açmam ve ona yetkilendirme şartımı eklemem gerekiyor.

+1

Bu, kabul edilen cevap olmalıdır, çünkü OP'nin ne istediğine ilişkin bir örnek verdiğinden, kılavuzların önerdiği dokümanlardaki formatları da kullanır. – dft