2015-11-11 77 views
-1

三種模式:供應商,課程和呼叫檢索父/母對象

class Provider < ActiveRecord::Base 

    has_many :courses, dependent: :destroy 
    has_many :calls, through: :courses 

end 

class Course < ActiveRecord::Base 

    has_many :calls, dependent: :destroy 
    has_many :facilities, through: :calls 

    belongs_to :provider 

end 

class Call < ActiveRecord::Base 

    belongs_to :course 
    belongs_to :provider 
    has_one :facility 

end 

我知道我可以做provider.calls,並有所有供應商的課程,所有呼叫。呼叫133在結果中。但是,如果我製作Call.find(133).provider,它將返回nil

我錯過了什麼?

+2

是的,你可以,什麼是問題? – potashin

+0

這就是問題所在。這不適合我。如果我做call.provider,那麼給我零。但是,如果我做provider.calls,那個調用就是結果。 – borjagvo

+0

@potashin,回答'是'表示您正在回答問題。我想這是我的問題... – borjagvo

回答

1

這是因爲您有through: :coursesprovider.calls的關係 - 它搜索該提供程序的課程並從中獲取調用。

另一種方式 - 簡單belongs_to預計PROVIDER_ID要在呼叫建立,這是不是(因爲很多一對多的上述關係),也不能有through,所以:

  • 使用call.course.provider(和如果你需要,可以緩存在provider_id中)