Wie Sie einen Nameerror mit Active und Beziehungen
-
03-07-2019 - |
Frage
Ich habe auf ein Problem stoßen, wenn ein Eins-zu-Beziehung verwenden. Ich mag jede Serie haben, haben einen Publisher und dass ein Verlag hat viele Serien.
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 Fehler-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 schlägt fehl in der letzten Zeile mit Nameerror: nicht initialisierte Konstante Verlag :: Serie
.Ich habe versucht, den Verleger und die Serie zu retten, aber das hat nicht funktioniert. Ich versuchte es mit nur einer Serie, aber das gibt die gleichen Fehler.
Da ich gerade erst anfangen mit Rails und Ruby, bin ich ratlos hier. Was mache ich falsch?
Lösung
Ihre eigentliche Frage beantworten, wie in Ihrem Kommentar erwähnt (? Wie kann ich mein Modell "Series" nennen ), müssen Sie die Rails machen Beugung dieser Ausnahme auf die Standard Pluralisierung Regeln bewusst.
Fügen Sie folgende config/environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
Damit können Sie Ihr Modell als Series
nennen. Sie können testen, ob es funktioniert mit script/console
:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
-I muss sagen, dass ich mit nur versucht Die Pluralizer und es scheint, dass Rails hat Wissen, wie das Wort zu behandeln Serie eingebaut. Probieren Sie es für sich selbst .
Andere Tipps
Ich glaube, John Antwort ist die beste.
Sie können auch direkt die Klassennamen in der has_many Erklärung angeben
has_many :series, :class_name => 'Serie'
Ihr has_many Beziehung Name ist in Ordnung, aber für den Modellname ist falsch.
Wie der Singular und Plural der Serie beide Serien sind, müssen Sie Ihr Modell von Serie zu Serie benennen. Danach sollte alles in Ordnung sein.