2011-01-06 28 views
0

factory_girl不能識別我定義的模型名稱,並且我需要引用該模型名稱,因爲我需要一個子類。這曾在梁2,但我遷移到軌3.工廠定義rails3 - 工廠定義中未初始化的常量

定義的 TermTerm::Interest
Factory.define :interest, :class => Term::Interest do |f| 
    f.name {"#{Factory.next(:lipsum_word)}ing"} 
end 

class Term < ActiveRecord::Base 
    belongs_to :category 

    class Interest < Term 
    end 

    class Award < Term 
    end 
end 

錯誤和堆棧跟蹤:

$ rake db:data:load --trace 
(in /Users/glurban/code/recruitd) 
rake aborted! 
uninitialized constant Term 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rspec-core-2.4.0/lib/rspec/core/backward_compatibility.rb:20:in `const_missing' 
/Users/glurban/code/recruitd/test/factories/factories.rb:316:in `<top (required)>' 
/Users/glurban/code/recruitd/lib/tasks/use_factories.rake:2:in `<top (required)>' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0/lib/rails/engine.rb:131:in `block in load_tasks' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0/lib/rails/engine.rb:131:in `each' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0/lib/rails/engine.rb:131:in `load_tasks' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0/lib/rails/application.rb:141:in `load_tasks' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/railties-3.0.0/lib/rails/application.rb:77:in `method_missing' 
/Users/glurban/code/recruitd/Rakefile:7:in `<top (required)>' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2383:in `load' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2383:in `raw_load_rakefile' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2017:in `block in load_rakefile' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2016:in `load_rakefile' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2000:in `block in run' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/gems/rake-0.8.7/bin/rake:31:in `<top (required)>' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/bin/rake:19:in `load' 
/Users/glurban/.rvm/gems/ruby-1.9.2-rc2/bin/rake:19:in `<main>' 

我試着將require_dependency 'term'添加到頂部factories.rb但後來我得到

Glens-MacBook-Pro:test glurban$ rake db:data:load 
(in /Users/glurban/code/recruitd) 
rake aborted! 
No such file to load -- term 

怎麼辦?

編輯:在迴應評論,是的,它發生只在耙,而不是在控制檯:

$ rails c 
Loading development environment (Rails 3.0.0) 
ruby-1.9.2-rc2 > Factory(:term) 
=> #<Term id: 3, type: nil, name: "Proud to be a Recruitd user", location: nil, category_id: nil, description: nil, url: nil, created_at: "2011-01-06 21:30:14", updated_at: "2011-01-06 21:30:14"> 
ruby-1.9.2-rc2 > Factory(:interest) 
=> #<Term::Interest id: 4, type: "Term::Interest", name: "siting", location: nil, category_id: nil, description: nil, url: nil, created_at: "2011-01-06 21:30:18", updated_at: "2011-01-06 21:30:18"> 

定製耙任務定義:

require 'factory_girl' 
require File.expand_path("test/factories/factories.rb") 

namespace :db do 
    namespace :data do 

    desc "Load sample data" 
    task :load => :environment do |t| 
     create_students 
     ... 
     create_student_files_and_feeds 
     puts "Completed loading sample data." 
    end 
    end 
end 

def create_interests 
    data_fetch("interests").each do |input| 
    Factory(:interest, :name => input.strip) 
    end 
    puts "Created interests" 
end 
+0

那麼這個錯誤消息只發生在Rake調用上,而不是在rails控制檯上呢? – pjammer

+0

'data:load'是一個自定義Rake任務嗎?如果是這樣,你是否包含環境? – zetetic

+0

它可能與你的方式有關定義期限,興趣和獎勵是否有理由感興趣和獎勵嵌套在條款和條款本身? –

回答

2

看在factory_girl文檔後再次,我意識到你可以使用字符串或類常量來指定一個類。所以我嘗試使用一個字符串,它的工作原理如下:

Factory.define :interest, :class => "Term::Interest" do |f| 
    f.name {"#{Factory.next(:lipsum_word)}ing"} 
end 

此外,關於嵌套類的評論。我最初是這樣做的,以保持類更有組織,但考慮到它創建的複雜性(特別是對於路由),我只是要將每個子類移動到它自己的模型文件。 (如果我不將它們放入單獨的文件中,則它們將它們嵌套在一起,導軌似乎有時無法找到子類 - 也就是說,如果父類沒有被引用(強制加載該文件),

相關問題