Question

J'ai rencontré un problème lors de l’utilisation d’une relation un à plusieurs. Je souhaite que chaque série ait un éditeur et qu'un éditeur en possède plusieurs.

Voici mon modèle d'éditeur:

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

Voici mon modèle de série:

class Serie < ActiveRecord::Base
  belongs_to :publisher
end

C’est le test qui a échoué:

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

Le test échoue sur la dernière ligne avec NameError: constante non initialisée Publisher :: Series.

J'ai essayé de sauvegarder l'éditeur et la série, mais cela n'a pas fonctionné. Je l’ai essayé avec une seule série, mais cela donne la même erreur.

Comme je viens juste de commencer avec Rails et Ruby, je suis désemparé ici. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Pour répondre à la question mentionnée dans votre commentaire (, comment nommer mon modèle "Série"? ), vous devez créer le Inflector conscient de cette exception à ses règles de pluralisation par défaut.

Ajoutez les éléments suivants à config / environment.rb :

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

Ceci vous permettra de nommer votre modèle comme Série . Vous pouvez vérifier que cela fonctionne avec script / console :

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

—Je dois dire que je viens d'essayer d'utiliser The Pluralizer et qu'il semblerait que Rails sait comment gérer le mot série intégré. Essayez par vous-même .

Autres conseils

Je crois que la réponse de John est la meilleure.

Vous pouvez également spécifier directement le nom de la classe dans la déclaration has_many

has_many :series, :class_name => 'Serie'

Votre nom de relation has_many convient, mais votre nom de modèle est incorrect.

Comme le singulier et le pluriel de séries sont les deux séries, vous devez renommer votre modèle de Série en Série. Après cela, tout devrait bien se passer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top