Вопрос

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

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

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, я здесь в растерянности.Что я делаю не так?

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

has_many :series, :class_name => 'Serie'

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top