我在使用一对多关系时遇到了问题。我希望每个系列都有一个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,我在这里不知所措。我做错了什么?
答案 0 :(得分:1)
要解决您的评论中提到的实际问题(如何命名我的模型“系列”?),您需要让Rails'Inflector知道此异常它的默认复数规则。
将以下内容添加到config/environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
这样您就可以将模型命名为Series
。您可以使用script/console
测试它的工作原理:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
- 我不得不说我刚尝试使用The Pluralizer,看来Rails知道如何处理内置的 series 这个词。 Try it for yourself
答案 1 :(得分:1)
我相信约翰的回答是最好的。
您还可以在has_many声明
中直接指定类名has_many :series, :class_name => 'Serie'
答案 2 :(得分:1)
您的has_many关系名称没问题,但您的型号名称错误。
由于单数和复数系列都是系列,您需要将模型从Serie重命名为Series。在那之后,一切都应该没问题。