2

나는 각 모델의 외래 키와 기본 키로 날짜를 사용하는 두 모델 사이에 has_many 연관이 있습니다.has_many 조건 또는 외래 키에 대한 proc

완벽하게 작동하지만 다른 것은 아닙니다.

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입니다 때문에 작동하지 않습니다

작품. 따라서 간단한 날짜에 정확한 datetime을 일치시키려는 nil을 반환합니다.

두 번째 모델에서 foreign_key start_at를 캐스팅하여 datetime에서 date로 변환하면 두 번째 모델과 일치하게 될까요?

답변

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 through를 다른 모델에도 사용하고 있습니다. 메소드가 다른 모델의 기능을 유지할 수 있을지 확신하지 못합니까? – ere

+0

왜 범위입니까? 왜냐하면 당신은 당신의 질문에 당신이 시간을 가지고 있다고 말하기 때문입니다. 그리고 아니오, 나는 has_many가 Works라고 생각하지 않습니다. – Aguardientico

관련 문제