2013-01-09 3 views
0

레일스 앱에서는 collection_select을 사용하여 사용자에게 유효한 선택 목록을 제공합니다. 조회 테이블에서 id 만 저장했습니다. 그런 다음 보기보기에서 look-up 클래스를 호출하여 id의 실제 값을 검색합니다. 편집에서레일 : 선택적 조회 필드

:

= f.collection_select :language_id, Language.find(:all, :conditions => ["supported = 't'"]), :id, :language, include_blank: false, :prompt => "Language" 

쇼 :이 모든 작업을 잘 선택의 여지가 이루어지지 않습니다하지 않는

%p 
    %b Language: 
    = Language.find(@article.language_id).language_code 

. @ article.language_id 필드가 null 인 경우 찾기이 실패하면보기를로드 할 수 없습니다. null 값을 무시하고 필드를 비워 두는 방법에 대한 제안 사항은 무엇입니까?

답변

1

find_by_id을 사용하면 id를 찾을 수 없으면 오류가 발생하지 않으므로 옵션이됩니다.

이 경우 데이터베이스에 대한 호출이 발생합니다. 이 뷰 코드를 혼란하지 않도록

그래서 난 그냥, 또한 모델이나 도우미로 이동 될 수있는 languange_id을 확인하고 기본

= @article.language_id.nil? ? default : Language.find_by_id(@article.language_id) 

이를 제공 할 것이다.

+0

완벽합니다. 정확히 내가 무엇을 찾고 있었는지. 고맙습니다. – ardochhigh

0

이것은 일반적인 문제입니다. try을 사용하여 nil 값을 남기면됩니다.

if @article.try(:language_id) != nil 
     @code = Language.find(@article.language_id).language_code 
    else 
     //default nil 
     @code = nil 
    end 
+0

찾기 ID를 찾을 수없는 경우 오류가 발생하므로이 작업을 수행 할 수 없습니다. – phoet

+0

올바른 오류 메시지를 피하려고합니다. – ardochhigh

+0

오케이, 코드를 업데이트했습니다. 조건을 적용하면 작동합니다. –