Ruby on rails 外键上有许多条件或过程

Ruby on rails 外键上有许多条件或过程,ruby-on-rails,ruby-on-rails-3,associations,has-many,has-one,Ruby On Rails,Ruby On Rails 3,Associations,Has Many,Has One,我在两个模型之间有很多关联,使用日期作为每个模型的外键和主键 它以一种方式完美地工作,但以另一种方式不行 工作 不起作用 has_many :event_logs, :primary_key => :start_at, :foreign_key => :start_at 原因是(我认为)因为QuizLog上的start是一个日期,而EventLog上的start是一个日期时间。因此,如果试图匹配简单日期的确切日期时间,则返回nil 如何在第二条语句上强制转换外键start,将其从

我在两个模型之间有很多关联,使用日期作为每个模型的外键和主键

它以一种方式完美地工作,但以另一种方式不行

工作

不起作用

has_many :event_logs, :primary_key => :start_at, :foreign_key => :start_at 
原因是(我认为)因为QuizLog上的start是一个
日期
,而EventLog上的start是一个
日期时间
。因此,如果试图匹配简单日期的确切日期时间,则返回nil


如何在第二条语句上强制转换外键start,将其从datetime转换为simply date,以便与第二个模型匹配?

阅读两遍标题后,我明白您的要求。也许下面的方法行得通

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
def事件日志
事件日志。其中('event_logs.start_at>=?和event_logs.start_at<?',start_at,start_at+1.天)
结束

我不确定您是否可以不用finder\u SQL来完成这项工作,但这应该可以

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

我尝试时得到了“输出错误:#”-(这会失败,因为您在声明中引用了
event\u log
。try
有很多:event\u日志,:primary\u key=>:start\u at,:conditions=>proc{“DATE(start\u DATE)='.{start\u DATE}'
我不是在寻找一个日期范围,而是一个单一的日期,我也在为另一个型号使用has\u MONY TO,我不确定是否有一种方法可以在其他型号上保留该功能?为什么是一个范围?因为你在问题中说你有一个日期时间(有小时)。不,我不认为has\u MONY TO有效。
has_many :event_logs, :finder_sql => proc { 
   "SELECT * FROM event_logs WHERE DATE(event_logs.start_at) = '#{start_at}'" 
}