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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top