Я столкнулся с проблемой при использовании отношения "один ко многим". Я хочу, чтобы у каждой серии был один издатель, а у одного издателя - много серий.
Это моя модель издателя:
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 ответа
Чтобы ответить на ваш фактический вопрос, упомянутый в вашем комментарии ( как я могу назвать свою модель "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 built-in. Попробуйте сами.
Я считаю, что ответ Джона лучший.
Вы также можете напрямую указать имя класса в объявлении has_many
has_many :series, :class_name => 'Serie'
Ваше имя отношения has_many в порядке, но имя вашей модели неправильное.
Поскольку и единственное, и множественное число серий являются сериями, вам необходимо переименовать вашу модель из Serie в Series. После этого все должно быть хорошо.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.