2011-10-19 2 views
0

에 배열을 저장하는 데 문제가 있어요 :이 방법은 내 코드의 다른 부분에서 작업하지만, 어떤 이유로 오류 메시지 만이 없습니다나는 레일 2.2.2 응용 프로그램 컨트롤러에

@reminders = Reminder.find(:all, :conditions => ["group_id = ? and remind_at < ?", g.id, @three_days_ago]) 
@reminders.each do |r| 
    r.remind_at = DateTime.now 
end 

@reminders.each(&:save!) 
p "*** test ***" 

데이터가 저장되지 않습니다. 속성에 액세스 할 수있는 문제는 아닙니다. 테스트 메시지가 콘솔에 인쇄되므로 프로세스가 코드의 해당 부분을 건너 뛰지 않습니다. 내 구문이 정확합니까?

+1

#remind_at를 설정 한 후에'r.save! '를 추가하면 작동합니까? – Ben

+2

는 괜찮아 보입니다.하지만 @ reminders.each do | r | r.update_attribute (: remind_at, DateTime.now) 끝 – chrispanda

답변

1

이 방법은 효과가 있지만 효율적인 방법은 아닙니다. 로드 할 때 여러 GB의 메모리가 잠재적으로 필요할 수있는 매우 많은 수의 미리 알림이있을 수 있습니다. 아무거나의 all을 가져 오는 것은 본질적으로 위험합니다.

더 나은 솔루션은 데이터베이스가 그것을 할 얻을 수 있습니다 :

Reminder.update_all(:remind_at => Time.now) 

을하더라도 큰 테이블에이 작업이 상당히 빨리 완료해야하며, 조정의 유효성을 검사하고 각 모델을 저장,로드를 필요로하지 않습니다 .

+0

죄송합니다. 나는 물건을 단순하게 유지하려고 노력했지만 진술에 조건을 넣어야했다. 모든 레코드가 업데이트를 받아야하는 것은 아닙니다. 내 실수. – Jay

+0

좋은 소식은'update_all'은 적용 할 조건 인 두 번째 인수를 가지고 있다는 것입니다. 새로운 버전의 Rails에서'where'를 사용하여 범위를 미리 지정할 수도 있습니다. – tadman

관련 문제