Получение NameError с ActiveRecord и отношениями - PullRequest
0 голосов
/ 30 апреля 2009

Я столкнулся с проблемой при использовании отношения один ко многим. Я хочу, чтобы у каждой серии было по одному издателю, а у одного издателя - много серий.

Это модель моего издателя:

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

Это моя модель серии:

class Serie < ActiveRecord::Base
  belongs_to :publisher
end

Это провальный тест:

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

Тест завершается неудачно в последней строке с NameError: неинициализированная константа Publisher :: Series.

Я пытался сохранить издателя и сериал, но это не сработало. Я пробовал только с одной серией, но это дает ту же ошибку.

Поскольку я только начинаю с Rails и Ruby, я в недоумении. Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 30 апреля 2009

Я считаю, что ответ Джона самый лучший.

Вы также можете напрямую указать имя класса в объявлении has_many

has_many :series, :class_name => 'Serie'
1 голос
/ 30 апреля 2009

Ваше имя отношения has_many в порядке, но название вашей модели неверно.

Поскольку единственное и множественное число серий являются сериями, вам необходимо переименовать модель из серии в серию. После этого все должно быть хорошо.

1 голос
/ 30 апреля 2009

Чтобы ответить на ваш актуальный вопрос, упомянутый в вашем комментарии ( как я могу назвать мою модель "Series"? ), вам нужно сообщить Rails ' Inflector об этом исключении по умолчанию правила множественного числа.

Добавить следующее к config/environment.rb:

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

Это позволит вам назвать вашу модель как Series. Вы можете проверить, что это работает, используя script/console:

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

- Я должен сказать, что я только что попытался использовать Pluralizer , и похоже, что Rails знает, как обрабатывать слово series встроенный. Попробуй сам .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...