2015-11-07 136 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,它正在工作!