2009-04-30 13 views
0

Ich habe ein Problem bei der Verwendung einer Eins-zu-viele-Beziehung. Ich möchte, dass jede Serie einen Publisher hat und dass ein Publisher viele Serien hat.Abrufen eines NameError mit ActiveRecord und Beziehungen

Das ist mein Verlag Modell:

class Publisher < ActiveRecord::Base 
    validates_presence_of :name 
    has_many :series 
end 

Das ist meine Serie Modell:

class Serie < ActiveRecord::Base 
    belongs_to :publisher 
end 

Dies ist der fehlerhafte Test:

test "a publisher should have a list of series" do 
    @publisher = Publisher.new :name => "Standaard Uitgeverij" 
    @series = [ Serie.new(:name => "De avonturen van Urbanus", :publisher => @publisher), 
       Serie.new(:name => "Suske en Wiske", :publisher => @publisher) ] 
    assert_equal @series, @publisher.series 
end 

Der Test in der letzten Zeile nicht mit NameError: nicht initialisierte Konstante Publisher :: Series.

Ich habe versucht, den Herausgeber und die Serie zu speichern, aber das hat nicht funktioniert. Ich habe es mit nur einer Serie versucht, aber das gibt den gleichen Fehler.

Da ich gerade mit Rails und Ruby anfange, bin ich hier ratlos. Was mache ich falsch?

+0

Ich habe die has_many-Beziehung in serie umbenannt und beim Speichern der Serie funktioniert die Beziehung. Aber ich möchte die Namensreihe anstelle der Serie haben. –

Antwort

1

Ihre eigentliche Frage beantworten, wie in Ihrem Kommentar erwähnt (wie kann ich mein Modell „Series“? nennen), müssen Sie die Rails' Inflector Kenntnis von dieser Ausnahme auf die Standard Pluralisierung Regeln zu machen.

Fügen Sie die folgenden config/environment.rb:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.uncountable 'series' 
end 

Dieses Sie Ihr Modell als Series nennen lassen. Sie können testen, ob es script/console gearbeitet hat mit:

>> "series".pluralize #=> "series" 
>> "series".singularize #=> "series" 

— Ich muss sagen, dass ich gerade The Pluralizer mit habe versucht, und es scheint, dass Rails hat Wissen, wie das Wort Serie Einbau-zu handhaben. Try it for yourself.

+0

Der Modellname ist Serie (Singular), aber der Name, den ich im Publisher-Modell verwenden möchte, ist Serie (Plural). –

+0

Ich verstehe das, aber der Modellname sollte Serie sein, denn das ist die korrekte Singularform des Wortes Serie. –

+0

Ah, richtig. Vielen Dank. Es funktioniert jetzt so, wie ich es möchte. –

1

Ich glaube, Johns Antwort ist die beste.

Sie können auch die Klassennamen in der has_many Erklärung angeben direkt

has_many :series, :class_name => 'Serie' 
+0

Ich wollte gerade diese Antwort posten. Aber es erklärt nicht, warum mein Code nicht akzeptiert wird. Meines Erachtens folgt der Code den Konventionen. Ich würde den class_name lieber nicht dort einschließen. –

1

Ihr has_many Beziehung Name in Ordnung ist, aber Ihr Modellname ist falsch.

Da der Singular und der Plural der Serien beide Serien sind, müssen Sie Ihr Modell von Serie in Serie umbenennen. Danach sollte alles in Ordnung sein.

Verwandte Themen