2009-04-30 52 views
0

我在使用一對多關係時遇到了問題。我希望每個系列都有一個發佈者,並且一個發佈者有很多系列。使用ActiveRecord和關係獲取NameError

這是我的出版商模型:

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,因此我在這裏感到茫然。我究竟做錯了什麼?

+0

我將has_many關係重命名爲serie,並在保存系列時關係正常。但我想用系列名替代系列。 – 2009-04-30 13:57:04

回答

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有如何處理這個詞系列內置知識。 Try it for yourself

+0

模型名稱是Serie(單數),但我想在Publisher模型中使用的名稱是series(複數)。 – 2009-04-30 14:30:46

+0

我明白,但型號名稱應該是Series,因爲這是單詞Series的正確單數形式。 – 2009-04-30 14:35:30

1

我相信約翰的答案是最好的。

您也可以直接在聲明的has_many

has_many :series, :class_name => 'Serie' 
1

你的has_many關係的名字是罰款指定類名,但型號名稱是錯誤的。由於單數和複數系列都是系列,所以您需要將您的模型從系列重新命名爲系列。之後,一切都會好起來的。