2011-09-26 2 views
1
나는 다음과 같은 문장을 가지고

:레코드에 대한 문 문제가 발견되지 간단한 경우

@all_comments = Comment.find(@task.id) 

문제가있다 댓글이없는 경우이 오류를 찾을 수없는 기록을 던졌습니다. 어떻게하면 자동으로 실패하지 않으므로 아무 것도 반환하지 않습니까?

+2

를 사용, 관계를 올바르게 설정했다면 빈 배열이 있으면. –

답변

5

당신이 작동하지 않을 수 있습니다 무엇을하려고.

라인 find(@task.id)은 보통 task과 동일한 id의 댓글을 검색합니다. 보통은 관계 설정 방법이 아닙니다.

는 일반적으로 당신은 task_id라는 열을 것이다 작업 및 주석 테이블 및 코멘트 테이블을 가질 것이다.

class Task 
    has_many :comments 
end 

class Comment 
    belongs_to :task 
end 

을 다음 당신은 단순히 쓸 수 있습니다 : : 이런 경우에는 다음과 같이 당신은 당신의 모델을 작성할 수

@all_comments = @task.comments 
+0

나는 완전히 그 보내고 말았습니다! – d11wtq

1

나는 AR을 사용하지 않는,하지만 난 그냥 생각 : 대한 기록은 어떤 수정없이 #find 달리, 발견이있는 경우

@all_comments = Comment.find(:first, @task.id) 

이 전무를 반환합니다.

편집 | 바로 가기도 있습니다 :

@all_comments = Comment.first(@task.id) 
1

나는 당신이 예상 한 것과 다른 것으로 생각합니다. 귀하의 질의합니다 (Task의 ID 임) ID @task.idComment를 요청합니다.

귀하의 질의는 그렇게 가야한다 :

@all_comments = Comment.where(:task_id => @task.id) 

또는

@task.comments 

이것은 당신이 그에 따라 관계를 선언 한 경우 작동, 일부 더 많은 옵션 (추가 의견을 허용한다, 더 나은 ..).

거기 "Active Record Query Interface" a를 "Rails Guides" 봐, 그리고 되세요.

0

레일은 find 통화 RecordNotfound 예외가 발생합니다. 이를 방지하기 위해 find_by 전화를 사용합니다. 당신이 TASK_ID 다음 사용자에 의해 find_all_by 방법을 작업 목록을 얻으려고 노력하는 경우

: task.comments 당신에게 의견의 목록을 반환해야 @

# returns an empty array when no tasks are found 
@comments = Comment.find_all_by_task_id(@task.id) 

그렇지 않으면 find_by

# returns nil when no task is found 
@comment = Comment.find_by_task_id(@task.id)