2009-06-06 8 views
6

ile aynı adı taşıyan modeli bulamıyor Ruby on Rails konusunda oldukça yeniyim ve bir "Set" modeline sahip bir projem var. Bu Rails 2.3.2'de. Sorun şu ki, bu modelin sınıfında hiç bir yöntem bulamıyor. Örneğin: "# için tanımlanmamış yöntem find' for Set:Class" or "undefined method hataları". Bu yöntemler Ruby'nin "Set" sınıfında benim model sınıfım yerine bulmaya çalışıyor gibi görünüyor. Ben Modülü :: Kümesi gibi benim Seti modeli sınıfının tam nitelikli adını yazabilirsiniz eğerRaylar, Ruby sınıfı

İşe yarayabilir, ama bunun ne olacağını emin değilim. (Ve evet, benim model ismimi gerçekten istiyorum. Uygulamam bağlamında başka bir şey garip olurdu).

Herhangi bir fikir?

cevap

22

Ad vermeyin. Bu şekilde çılgınlık yatıyor.

anlaşma zaten küresel bağlamda tanımlanan 'Set' yeniden tanımlamak için çalışıyoruz çünkü sınıfını tanımlayan başarısız olmasıdır.

class Set < ActiveRecord::Base # You are attempting to define a constant 'Set' 
           # here, but you can't because it already exists 

Bir modülde sınıfınızı koyabilirsiniz ve bir ad içinde yer alan tanımlayacağız çünkü o zaman hata almazsınız.

Ancak, Set sınıfınızı kullanmak istediğiniz her zaman, bunu Özel :: Set olarak adlandırmanız gerekir. Bir çok Rails büyüsü işe yaramaz çünkü sınıf adlarının global bağlamda tanımlanmasını bekliyor. Sol ve sağ maymun eklentileri ve mücevherleri olacaksınız.

Sadece farklı bir ad vermek daha kolay.

Tüm sihir işleri ve hiçbir maymun yakalama gerektirmez.

+0

Teşekkürler, başka bir isim düşünmem gerekecek. –

+0

Sarah haklı ve bu, Rails'in kendisinin düzeltmek istediğim bir kusurudur. Toleranssız Rails geliştiricileri zaten çok düşünürler. Uygulamalarımda, kodumun% 90'ı lib dizini içerisindedir - tamamen test odaklıdır ve diğerleriyle güzelce oynamak için adlandırılmıştır. Küresel isim alanında bir sınıf öncelik almamalı çünkü arkasında bir db tablosu var. –