2011-03-25 6 views
1

모델 "submodelb"와 has_many_through 관계가있는 "modela"모델이 있습니다. 컨트롤러에서 modela에 연결된 하위 모델이 있는지 확인하고 싶습니다. 아래 두 코드 예제를 시도했습니다. 그러나 modela에 하위 노드가없는 경우 "undefined method"하위 노드 "라는 오류가 발생합니다. 내가 뭘 잘못하고 있는지 보도록 도와주세요.Rails 3 연결 존재 여부 확인 중 오류가 발생했습니다.

샘플 1 : [email protected]?
@submodelbs = @ modela.submodelbs
다른 의 @submodelbs = [] 단부

샘플 2 : [email protected] 경우?
@submodelbs = @ modela.submodelbs
다른 @submodelbs의 = [] 끝

+0

정의되지 않은 메소드'submodelbs'는'@ modela'가 아마도 nil이되었다는 것을 의미합니다. –

답변

-4

수표를 begin...rescue...end 블록에 넣으면 어떨까요?

+0

이것이 OP의 문제를 해결하는 절대적으로 부적절한 방법이고 다른 사람이 이것을 읽는 다른 사람들은 분명히 다른 답변과 비슷한 것을해야한다고 말하고 싶습니다. 그런 불쌍한 해결책에 대해 사과드립니다. – mway

0

나는 빈 사용할 수 있습니까?

unless @modela.submodelbs.blank? 
    #modela has submodelbs 
end 

하지만 오류 messege는 협회의 정의에 문제가있을 수 있음을 시사한다 ... 또한

당신이 submodelbs 경우 한 줄

@modela.submodelbs ||= [] 

수행 할 수 있습니다 달성하기 위해 노력하고있다 nil 빈 배열이 할당됩니다.

1

당신은 blank?

@submodelbs = @modela.submodelbs.present? ? @modela.submodelbs : [] 

의 반대가 .present?을 사용할 수 있습니다 그러나 나는 당신의 문제가 @modelanil을 할 수있다 또는 모델에 제대로 연결을 정의하지 않은 수라고 생각합니다.

1

has_many_through에 의해 생성 된 판독기 메서드는 항상 Array와 비슷한 형식을 반환하므로 절대 반환하지 않아야합니다. 그럼, 항상 @modela.submodelbs을 돌려 줄 수는 없습니까?

+0

예 .. 당신 말이 맞아요. 연결된 레코드가 없다면'[]'를 반환합니다. 응답하는 동안 그것을 놓쳤습니다 ... – rubyprince

관련 문제