2014-04-25 47 views
1

我一直在努力設置has_many關係使用工廠女孩。 我有兩個模型的課程和類別,一門課程可以有很多類別,我有兩個工廠的課程和類別。has_many通過與工廠女孩錯誤時運行測試

我有這三種模式

class Course < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, use: [:slugged, :history] 

    has_many :categorisations 
    has_many :categories, :through=> :categorisations 
    belongs_to :partner 
    belongs_to :user 
# validates_uniqueness_of :title 
    validates :title, presence: true 
    # validates :start_date, presence: true 
    # validates :duration, presence:true 
    # validates :state, presence:true 
    validates :categories, length: { minimum: 1 , message:"please select"} 
    validates :partner_id, presence: true, allow_nil: false 
end 
end 

class Category < ActiveRecord::Base 
    has_many :categorisations 
    has_many :courses, :through=> :categorisations 
    belongs_to :user 
#validation 
    validates :name, presence: true , uniqueness: { scope: :name } 
end 

class Categorisation < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :course 
end 

工廠在indiviual文件

FactoryGirl.define do 
    factory :course do |f| 
    f.title "Introduction to Accounting short course" 
    f.start_date "2014-02-27 00:00:00" 
    f.duration "10 WEEKS ONLINE" 
    partner 
    categorisation 
    end 
    # join table factory - :category 
    factory :categorisation do |categorisation| 
    categorisation.association :course 
    categorisation.association :category 
    end 
end 

範疇廠

FactoryGirl.define do 
    factory :category do |f| 
    f.name "Marketing" 
    end 
end 

我得到的測試運行時的錯誤是:

霸rtner有一個有效的工廠當然 故障/錯誤:期待(FactoryGirl.create(:當然)),以be_valid 的ActiveRecord :: RecordInvalid: 驗證失敗:名稱已採取

我想要做的就是創建一個具有一個或多個類別的課程,我不確定我在這裏做錯了什麼,但我需要課程工廠有效。我知道我的分類工廠是有效的。

它似乎嘗試創建一個類兩次,這就是爲什麼它出現的名稱錯誤已經存在。

+0

在那裏爲'#課程任何title'驗證?我認爲這個問題出現在你的「課程」中。你能提供課程模型的錯誤嗎? – xlembouras

+0

該模型的測試沒有它通過的關聯,我不認爲它是標題 –

+0

是否有標題的唯一性驗證器? – xlembouras

回答

0

您正在創建課程兩次,一次在頂部,然後在創建分類時再次創建。因爲您沒有鏈接到以前創建的課程,FactoryGirl正在爲您創建一個新的課程。如果您在連接線之前放置一箇中斷,您將在關聯代碼中看到已經存在的內容。

您需要中添加過程的細節在該行的加入

categorisation.association :course 

例如

categorisation.association (:course, title: "Introduction to Accounting short course") 

(抱歉的語法有可能稍稍偏出,但你的想法)

+0

對不起,只是一個問題,我將其添加到我的分類工廠 –