has_many条件或proc对外键

我在两个模型之间有一个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而EventLog上的start_at是一个date 。 所以它返回nil试图匹配一个简单日期的确切日期时间。

如何在第二个语句上转换foreign_key start_at以将其从datetime首先转换为简单日期,以便它与第二个模型匹配?

我不确定你是否可以在不使用finder_SQL的情况下完成它,但这应该可行。

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

在阅读了两次标题后,我明白了你的要求。 可能是下面这样的东西会起作用吗?:

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

我不确定,但我会使用类似的东西:

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