ŞTİ alt sınıflar için yolları işlemek için en iyi uygulamalar raylar
Raylar görüş ve benim denetleyicileri redirect_to, link_to, form_for yöntem çağrıları ile doludur. Bazen link_to redirect_to ilişkilendiriyorlar yolları (*örneğin 6*) açık değildir, ancak birçok kez yolları örtülü (örneğin link_to 'Show', person).
Ben eklemek bazı tek tablo devralma (STI) model (Employee < Person) ve tüm bu yöntemleri kırmak için bir örnek alt sınıfı (Employee); ne zaman raylar yürütür link_to @person hata undefined method employee_path' for #<#<Class:0x000001022bcd40>:0x0000010226d038>. Raylar bir güzergah sınıf adı ile tanımlanan çalışanı olan bir nesne arıyor. Bu çalışan rotaları tanımlanır ve eylemleri de belli değil yani çalışan denetleyicisi diye bir şey yok.
Bu soru daha önce de soruldu:
- StackOverflow, cevap tüm kod temeli link_to vb her örneğini düzenlemek ve yolunu açıkça devlete
- StackOverflow tekrar, iki kiÅŸi
routes.rbüst sınıf (map.resources :employees, :controller => 'people') alt kaynak göster için kullanmanızı öneririz. Bu YÜZDEN aynı soruyu en iyi cevap-döküm tipi her örneği bulunanla.becomeskullanarak nesne gösteriyor - StackOverflow üst cevabım var ama bir tane de Kendine kampı Tekrar Yapmak, ve yinelenen her alt sınıf için iskele oluşturmayı öneriyor.
- Here's üst cevap yanlış (büyü işe Yarıyor Raylar!) gibi görünüyor, aynı soruyu bir daha bu KADAR,
- Web üzerinde başka bir yerde, F2Andy yolunu kodu her yerde düzenleme önerir this blog post buldum.
- Mantıksal Gerçeklik Tasarımı 34* *blog yazısı üzerine, üst sınıf denetleyici Bir alt sınıf için kaynakları, gibi ÇOK sayıda 2 yukarıdaki harita cevap vermek tavsiye edilir.
- Alex Reisner bir yazı Single Table Inheritance in Rails " savunuyor karşı eşleme kaynakları alt sınıflar üst sınıf
routes.rbberi tek yakalar yönlendirme kırılmalarılink_toredirect_toamaform_for. Üst sınıf yöntemi alt sınıf hakkında yalan söylemen için ekleme önerir yerine. Kulağa hoş geliyor, ama yöntem bana hataundefined local variable or method `child' for #verdi.
En şık görünüyor ve en fazla fikir birliği olan cevap (ama hepsi değilbuzarif, ne debuçok görüş birliği) routes.rb senin için kaynakları Ekle. Bu form_for parlamıyor. Biraz netlik ihtiyacım var! Yukarıdaki seçenekler birinin ortaya çıkması, benim seçenekleri vardır
- göster
routes.rbüst sınıf denetleyici Bir alt sınıf kaynakları (ve tüm alt sınıflar üzerinde form_for aramama gerek yok umarım) - Geçersiz iç yöntemleri sınıfları birbirimize yalan yapmak için raylar
- Bir nesnenin eylem yolunu açık veya örtülü olarak, ya yolunu değiştiriyor ya da tür çevrim nesne çağrılır kodu her seferinde düzenlemek.
Tüm bu çelişkili cevapları olan, bir iktidar istiyorum. İyi cevap yok gibi geliyor bana. Bu raylar' tasarımı mı? başarısız. Eğer öyleyse, tamir olabilecek bir hata mı? Ya değilse, o zaman umarım yakında birileri olabilir bırakma beni düz bu, bana yardımcı artılarını ve eksilerini her seçenek (ya da açıkla neden böyle bir seçenek yok), ve hangisi doğru cevap, ve neden. Ya da web de bulamıyorum doğru bir cevap var mı?
CEVAP
Bu kadar az yan etki ile kalmayı başardım en basit çözüm.
class Person < Contact
def self.model_name
Contact.model_name
end
end
Şimdi url_for @person beklendiği gibi contact_path göster.
Nasıl çalışır:URL yardımcıları YourModel.model_name model üzerine yansıtmak ve birçok şeyler arasında) tekil/çoğul rota anahtarları üretmek için kullanır. Burada Person temelde söylüyorSadece Contact adam gibi, onu sormak istiyorum.

Raylar için bir cron iş: en iyi uygula...
Ne kadar çok uzun dizin adları işlemek...
API Raylar için Sürüm oluşturma Yollar...
Raylar birden fazla işlemek için yönle...
Hareket Gıt ile yeni bir şube için en ...