Pregunta

Me he encontrado con un problema al usar una relación de uno a muchos. Quiero que cada serie tenga un editor y ese editor tenga muchas series.

Este es mi modelo de editor:

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

Este es mi modelo de la Serie:

class Serie < ActiveRecord::Base
  belongs_to :publisher
end

Esta es la prueba que falla:

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

La prueba falla en la última línea con NameError: constante sin inicializar Publisher :: Series.

Traté de salvar al editor y la serie, pero esto no funcionó. Lo probé con solo una serie, pero esto da el mismo error.

Como recién estoy comenzando con Rails y Ruby, estoy perdido aquí. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Para responder a su pregunta real como se menciona en su comentario ( ¿cómo puedo nombrar mi modelo " Series " ;? ), debe hacer que los Rails sean Inflector consciente de esta excepción a sus reglas de pluralización predeterminadas.

Agregue lo siguiente a config / environment.rb :

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

Esto le permitirá nombrar a su modelo como Series . Puede probar que funciona con script / console :

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

: tengo que decir que acabo de intentar usar The Pluralizer y parece que Rails tiene conocimiento de cómo manejar la palabra series incorporada. Pruébelo usted mismo .

Otros consejos

Creo que la respuesta de John es la mejor.

También puede especificar directamente el nombre de la clase en la declaración has_many

has_many :series, :class_name => 'Serie'

Su nombre de relación has_many está bien, pero el nombre de su modelo es incorrecto.

Como el singular y el plural de series son series, debe cambiar el nombre de su modelo de Serie a Serie. Después de eso, todo debería estar bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top