2014-04-30 13 views
2

후 I는 다음과 같이 모델이 작동하지 않습니다. 0.다음 방법 (Class.first)는 레일 업데이트 4.1.0

ArgumentError in QuestionsController#answer invalid value for Integer(): "{:conditions=>[\"id > ? AND level_id = ?\""

나는이 문제를 해결하는 방법을 알아낼 수 없습니다 지금 나는이 오류가 발생합니다. 아마 레일 업데이트가이 문제의 원인일까요? 나는 다른 응용 프로그램에서 똑같은 방법을 사용하며 여전히 작동합니다.

+0

어떻게이 함수를 호출을 ??? – Saurabh

답변

0

이 시도

Question.where('id > ? AND level_id = ?', self.id, self.level_id).order(id: :asc).first 
1

로 변경합니다 : 이것은 documentation에서

Question.where("id > ? AND level_id = ?", id, level_id).order("id asc").first 
+0

이것은 불행히도 작동하지 않았다. 다음과 같은 오류가 발생했다 : QuestionsController # 응답 에서 ActiveRecord :: StatementInvalid SQLite3 :: SQLException : 인식 할 수없는 토큰 : " 'id> 1 AND level_id = 1) ORDER BY id asc LIMIT 1" : SELECT "questions". * FROM "questions"WHERE ('id> 1 AND level_id = 1) 주문 번호 id asc LIMIT 1 – shann

+0

이상한. 콘솔에서해볼 수 있습니까? 질문에 출력을 추가 할 수 있습니까? – tompave

+1

또한, 콘솔에서 다시 SQL 문에 하드 코드 된 값으로 시도하십시오.'("id> 1 AND level_id = 1")' – tompave

0

작동합니다의 first 방법은 정수가 아닌 문자열을 사용합니다.

메서드 설명에 첫 번째 N 레코드가 반환됨을 나타내는 것처럼 문자열을 가져 오는 것을 기억하지 않습니다. 어쩌면 그 특별한 방법은 당신이 업데이트를하고 다른 몇 가지 변화를 할 때까지 결코 호출되지 않았습니다.

조건을 충족하는 where 방법을 사용하고 first을 사용하면 첫 번째 결과를 얻을 수 있습니다. 3.2 레일에 최대

Question.where(:conditions => ['id > ? AND level_id = ?', self.id, self.level_id], :order => 'id ASC').first 
+0

정말 고마워요! 이것은 매우 도움이되었습니다. – shann

4

방법 first는 레일 4

변경되었습니다, 그것은 조건 인수를 사용할 것이며, 구현이 작동합니다. original documentation은 사용하기 전에 *args의 유형을 확인하는 방법에 유의하십시오.

레일 4에서 메소드가 변경되어 (docs), 이제는 정수 제한 만 허용합니다.

당신과 구현 업데이트해야합니다 :

def next 
    Question.where('id > ? AND level_id = ?', id, level_id).order(id: :asc).first 
end