Obtención de un error de nombre con ActiveRecord y relaciones
-
03-07-2019 - |
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?
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.