我在两个模型之间有一个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是datetime
。所以它返回nil,试图在一个简单的日期匹配确切的日期时间。
如何在第二个语句上转换foreign_key start_at,将其从datetime首先转换为简单日期,以便与第二个模型匹配?
答案 0 :(得分:3)
我不确定你是否可以在不使用finder_SQL的情况下完成它,但这应该可行。
has_many :event_logs, :finder_sql => proc {
"SELECT * FROM event_logs WHERE DATE(event_logs.start_at) = '#{start_at}'"
}
答案 1 :(得分:1)
两次阅读标题后,我明白你的要求。可能会像以下那样起作用吗?:
has_many :event_logs, :primary_key => :start_at, :conditions => proc { "start_date = '#{event_logs.start_date.to_date}'" }
答案 2 :(得分:0)
我不确定,但我会使用类似的东西:
def event_logs
EventLogs.where('event_logs.start_at >= ? AND event_logs.start_at < ?', start_at, start_at + 1.day)
end