2015-11-07 80 views
0

我有以下模型設置,並且您可以看到,Tenant:current_rental_agreementhas_one關係,這是一個範圍has_oneFactoryGirl範圍has_one返回零

class Property < ActiveRecord::Base 
    has_many :rental_agreements 
    has_one :current_rental_agreement, -> { where("'#{ Date.today.to_s(:db) }' BETWEEN start_date AND end_date") }, class_name: 'RentalAgreement' 
    has_one :tenant, through: :current_rental_agreement 
end class 

class Tenant < User 
    has_many :rental_agreements 
    has_many :properties, through: :rental_agreements 
    has_one :current_rental_agreement, -> { where("current_date BETWEEN start_date AND end_date") }, class_name: 'RentalAgreement' 
    has_one :property, through: :current_rental_agreement 
end 

class RentalAgreement < ActiveRecord::Base 
    belongs_to :property 
    belongs_to :tenant 
end 

這適用於除測試以外的所有事情。因爲這在測試中不起作用,所以has_oneproperty的關係顯然不起作用。

我有以下工廠成立:

FactoryGirl.define do 
    factory :agent do 
    first_name "James" 
    last_name "Smith" 
    end 

    factory :landlord do 
    first_name "Bob" 
    last_name "Builder" 
    end 

    factory :tenant do 
    first_name "Jack" 
    last_name "Builder" 
    end 

    factory :rental_agreement do 
    start_date 1.day.ago 
    end_date 1.year.from_now 
    end 
end 

我打造出來,像這樣:

agency = create(:agency) 
agent = create(:agent, agency: agency) 
landlord = create(:landlord, agency: agency) 
property = create(:property, agency: agency, account_manager: agent, landlord: landlord) 
tenant = create(:tenant, agency: agency) 
rental_agreement = create(:rental_agreement, property: property, tenant: tenant, agent: agent) 

當我運行這個然而,這一切似乎很好..他們都返回了什麼他們的意思是返回,除了當我打電話tenant.current_rental_agreement返回nil,如tenant.propertytenant.rental_agreementstenant.properties雖然工作。

看起來雖然rental_agreement記錄已經創建,但似乎沒有連接起來,我不知道爲什麼!

任何人有任何想法?

回答

0

感謝Nicolas Alpi在Twitter上指出我在創建關聯後沒有重新加載租戶。在創建rental_agreement後添加了tenant.reload,它正在工作!