2013-01-23 52 views
1

我在FactoryGirl的困難情況下可能可以幫助我解決問題。該代碼是這樣的:在FactoryGirl的鉤子中使用關聯

class Bet 
    belongs_to :market 
    belongs_to :option 
    has_one :market, :through => :option 
    has_one :event, :through => :market 

    before_validation :set_event_date 

    scope :by_event_date, order(arel_table[:event_date].desc) 

    def set_event_date 
    self.event_date = event.date 
    end 
end 

我需要兌現的EVENT_DATE屬性的投注,因爲範圍by_event_date是沒有物化成本太高。我運行FactoryGirl.create :bet時出現問題。掛鉤被執行,但bet.event爲零,因此引發異常。無論如何要配置FactoryGirl真正創建關聯的對象嗎?

回答

1

你的工廠代碼是?你可以這樣做

FactoryGirl.define do 
    factory :event do 
    #something 
    end 

    factory :bet do 
    #something 
    event 
    end 
end 

應該爲你

你也可以使用factorygirl回調來定製它一點

FactoryGirl.define do 
    factory :event do 
    #something 
    end 

    factory :bet do 
    #something 
    after_build do |bet| #for newer version it is after(:build) do |bet|... 
     bet.event = Factory.build(:event) 
    end 
    end 
end 

時保存記錄的事件將是創建一個事件保存到

編輯:嘗試分配市場然後

FactoryGirl.define do 
    factory :event do 
    #something 
    end 

    factory :market do 
    event 
    end 

    factory :bet do 
    #something 
    market 
    end 
end 
+0

無效。在第一個示例中,由於它是直通關聯,因此無法直接從工廠訪問該事件。在第二個之後,在對象before_validation之後執行(:build)之後。 – Gawyn

+0

檢查我的更新,使用市場工廠,然後 – arieljuod

+0

我已經完成了這項工作,它也不起作用。 :P我發現使其工作的唯一方法是遵循'set_event_date'方法中的完整「路徑」:'self.event_date = option.market.event.date'。但它非常難看。 – Gawyn

相關問題