2013-07-27 71 views
0

我在我的Rails應用程序中有兩個實體,我試圖建立關係 - 檢查和個月。月的實例將有一個start_date和一個end_date - 這些日期不完全對齊日曆月份。支票的實例將有一個deposit_date。我想以某種方式描述一種關係,其中月份有許多支票,存款日期在月的開始日期和結束日期之間。這可能嗎?Rails與外鍵之間的關係?

回答

0

我到底做了什麼是刪除的has_many:檢查從本月類,並定義我自己的方法:

class Month < ActiveRecord::Base 
    # other associations and validations omitted 

    def checks 
    Check.where(deposit_date: self.start_date..self.end_date) 
    end 
end 

我不知道這是否會被認爲是一個黑客,但它給了我我需要的東西。當然,我很樂意看到更多'Rails方式'來做到這一點。

1

這是可能的。您可以自定義您的relation參考。

class Month < ActiveRecord::Base 
    has_many :checks, ->(month) { where deposited_at: (month.start_at)..(month.end_at) }, class_name: 'Check' 
end 

你實際上並不需要指定class_name,除非你改變你的關係名。例如,如果您有current_checks而不是簡單地命名它checks

+0

那個答案對您有幫助嗎? –

+0

非常感謝!那就是訣竅。 – user1706938

+0

實際上,我後來發現,雖然這種方法沒有誤報我,但沒有給我預期的結果。問題在於它仍然期望檢查和月份之間的主鍵/外鍵關係,並將lambda附加到語句的末尾。 – user1706938