2013-07-02 106 views
2

我有一個has_many關聯使用日期作爲每個模型的外鍵和主鍵兩個模型之間。has_many條件或過程外鍵

它完美的一種方式,但不是其他。

作品

has_one :quiz_log, :primary_key => :start_at, :foreign_key => :start_at 

不工作

has_many :event_logs, :primary_key => :start_at, :foreign_key => :start_at 

的原因是(我認爲),因爲在QuizLog的start_at是date和事件日誌的start_at是datetime。因此,它返回零,試圖匹配一個簡單的日期確切的日期時間。

如何在第二條語句上將foreign_key start_at轉換爲將其從datetime首次轉換爲簡單日期以便與第二個模型匹配?

回答

2

我不知道,如果你能做到這一點,而無需使用finder_SQL,但這應該工作。

has_many :event_logs, :finder_sql => proc { 
    "SELECT * FROM event_logs WHERE DATE(event_logs.start_at) = '#{start_at}'" 
} 
0

兩次閱讀標題後,我明白你在問什麼。可能像下面將工作?:

has_many :event_logs, :primary_key => :start_at, :conditions => proc { "start_date = '#{event_logs.start_date.to_date}'" } 
+0

當我嘗試過時,出現「輸出錯誤:# ere

+0

,因爲你在聲明中引用了'event_log',所以失敗了。 嘗試'has_many:event_logs,:primary_key =>:start_at,:conditions => proc {「DATE(start_date)='#{start_date}'」} ' – faron

0

我不知道,但我會用這樣的:

def event_logs 
    EventLogs.where('event_logs.start_at >= ? AND event_logs.start_at < ?', start_at, start_at + 1.day) 
end 
+0

我不是在尋找日期範圍,而是在尋找一個日期,同時我也在使用has_many來處理另一個模型,我不確定某種方法是否會保留其他模型的功能? – ere

+0

爲什麼選擇範圍因爲你在你的問題中告訴你有一個日期時間(有幾個小時),不,我不認爲has_many通過Works。 – Aguardientico