Ottenere un NameError con ActiveRecord e relazioni
-
03-07-2019 - |
Domanda
Ho riscontrato un problema durante l'utilizzo di una relazione uno a molti. Voglio che ogni serie abbia un editore e quell'editore abbia molte serie.
Questo è il mio modello di Publisher:
class Publisher < ActiveRecord::Base
validates_presence_of :name
has_many :series
end
Questo è il mio modello Serie:
class Serie < ActiveRecord::Base
belongs_to :publisher
end
Questo è il test fallito:
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
Il test ha esito negativo sull'ultima riga con NameError: costante non inizializzata Publisher :: Series.
Ho provato a salvare l'editore e la serie, ma questo non ha funzionato. L'ho provato con una sola serie, ma questo dà lo stesso errore.
Dal momento che ho appena iniziato con Rails e Ruby, sono in perdita qui. Cosa sto sbagliando?
Soluzione
Per rispondere alla tua vera domanda come menzionato nel tuo commento ( come posso nominare il mio modello " Series " ;? ), devi creare Inflector consapevole di questa eccezione alle sue regole di pluralizzazione predefinite.
Aggiungi quanto segue a config / environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
Questo ti permetterà di nominare il tuo modello come Series
. Puoi provare che ha funzionato usando script / console
:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
— Devo dire che ho appena provato a utilizzare The Pluralizer e sembrerebbe che Rails ha una conoscenza di come gestire la parola serie integrata. Provalo tu stesso .
Altri suggerimenti
Credo che la risposta di John sia la migliore.
Puoi anche specificare direttamente il nome della classe nella dichiarazione has_many
has_many :series, :class_name => 'Serie'
Il tuo nome di relazione has_many va bene, ma il nome del tuo modello è sbagliato.
Poiché il singolare e il plurale delle serie sono entrambe serie, è necessario rinominare il modello da Serie a Serie. Dopodiché, tutto dovrebbe andare bene.