2012-06-25 14 views
6

Rails 3.2.6 uygulamasında, bir widget ile ilgili veri koleksiyonunu temsil eden bir modelim var. Zihnime göre, bu sınıfın doğru adı, her bir öğe için birden fazla öğe verdiğim için, WidgetData, çoğul. Ben bu sınıf için bir form oluşturmak için Raylar sorarsanızRails data/datum inflection issue

:

= form_for @widget_data do |f| 
    ... 

bir hata ActionView::Template::Error (undefined method 'widget_datum_path' ... olsun. Muhtemelen bu Rails veri/datum çekim kuralından kaynaklanmaktadır.

Bunu en iyi nasıl çözeceğime emin değilim: Rails modelimin aslında WidgetDatum olması gerektiğini dikte edebilmesine izin verebilirim. Ya da bu özel durumda çekişme kuralının kullanımını bir şekilde devre dışı bırakabilirim, fakat bunu en iyi nasıl yapacağından emin değilim. Tavsiye edilir.

olası bir cevabı tahmin etmek için: modeli sadece Widget çağrılmaz nedenini ben de WidgetData ve diğer bilgileri hem birleştiren bir widget daha zengin bir görünüm sunar zaten adında bir cephe sınıf, olması.

cevap

10

dosyaya bu kodu ekleyin: "Ben Widget başına veri birden çok öğe var çünkü, çoğul" config/ilklendiriciler/inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 

    inflect.irregular 'widgetdata', 'widgetdatas' # or whatever you want your plural to be 

end 

yaptığınız yorumu ele almak

Buradaki fikir, her bir widget verisi satırının kendi nesnesi olmasıdır. Aktif Kayıt, her veri satırı için bir WidgetData örneği oluşturur. Tablo birçok WidgetDatums sahip olduğundan veritabanı tablonuz (Rails sözleşmesine göre) WidgetData olarak adlandırılmalıdır. Ancak Rails'te, her veri dizisi, model sınıfınıza dayalı olarak bireysel bir nesne olarak başlatılır. Çekimlerinizi doğru olarak yapılandırdığınız sürece her iki şekilde çalışır. Genelde sadece mevcut bir veri modeline bir arayüz oluştururken bunu yapmaya çalışıyorum. Ancak, o zaman bile, modelinizde self.table_name = 'old table name convention''u kullanarak, mevcut modelin üstüne yeni bir ray veri modeli oluşturmak daha iyi olur.

+0

Muhtemelen inflect.irregular 'widget_data' olmalı – 0x4a6f4672

1

Bu durumda çekim kuralını değiştirmek isterseniz, this question'a bakabilirsiniz.

+0

Teşekkürler. Sorularımı göndermeden önce cevaplar için SO aradım; arama becerileriniz açıkça benim için üstün! –