我在使用一对多关系时遇到了问题。我希望每个系列都有一个Publisher,而一个Publisher有很多系列。

这是我的发布商型号:

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的最后一行失败:uninitialized constant Publisher :: Series。

我试图保存发布者和系列,但这不起作用。我只用一个系列试过它,但这也给出了同样的错误。

由于我刚开始使用Rails和Ruby,我在这里不知所措。我做错了什么?

有帮助吗?

解决方案

要解决您评论中提到的实际问题(如何命名我的模型“系列”?),您需要制作Rails' Inflector 了解其默认复数规则的此异常。

将以下内容添加到 config / environment.rb

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

这样您就可以将模型命名为 Series 。您可以使用 script / console 测试它是否有效:

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

&#8212;我不得不说我刚尝试使用 The Pluralizer 和它看来Rails知道如何处理内置的 series 这个词。 亲自试用

其他提示

我相信约翰的回答是最好的。

您还可以在has_many声明

中直接指定类名
has_many :series, :class_name => 'Serie'

您的has_many关系名称没问题,但您的型号名称错误。

由于单数和复数系列都是系列,您需要将模型从Serie重命名为Series。在那之后,一切都应该没问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top