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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top