Conseguir um NameError com ActiveRecord e relacionamentos
-
03-07-2019 - |
Pergunta
eu correr em um problema quando se usa uma relação um para muitos. Quero ter cada série tem uma editora e que um Publisher tem muitos Series.
Este é o meu modelo Editor:
class Publisher < ActiveRecord::Base
validates_presence_of :name
has_many :series
end
Este é o meu modelo de Série:
class Serie < ActiveRecord::Base
belongs_to :publisher
end
Este é o teste falhar:
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
O teste falhar na última linha com NameError:. Não inicializado constante Editor :: Series
Eu tentei salvar a editora e da série, mas isso não funcionou. Eu tentei com apenas uma serie, mas isso dá o mesmo erro.
Desde que eu estou apenas começando com Rails e Ruby, eu estou em uma perda aqui. O que estou fazendo de errado?
Solução
Para fazer face a sua pergunta real, como mencionado em seu comentário (? como posso citar o meu modelo "Series" ), você precisa fazer as Rails' Inflector ciente desta excepção às suas regras de pluralização padrão.
Adicione o seguinte ao config/environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
Isso permitirá que você nomear seu modelo como Series
. Você pode testar se é trabalhado usando script/console
:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
-Eu tenho que dizer que eu apenas tentei usando O Pluralizer e parece que Rails tem conhecimento de como lidar com a palavra série built-in. Tente você mesmo .
Outras dicas
Eu acredito que a resposta de John é um dos melhores.
Você também pode especificar diretamente o nome da classe na declaração has_many
has_many :series, :class_name => 'Serie'
Seu nome relacionamento has_many é bom, mas o nome do modelo está errado.
Como a série singular e plural de são ambas as séries, você precisa mudar o nome do modelo da Serie à série. Depois disso, tudo deve estar bem.