2012-07-08 3 views
1

정보를 제공 해주신 모든 분들께 감사합니다.! 매우 빠른 응답이있었습니다. 내 해결책은 if에서 더 명확한 테스트를 사용하는 것이 었습니다. 승리를위한 문법!erb에서 코드를 실행하면 안됩니다.

는 "당신이 그것을 기대하지 않았다 경우는 전무 개체가! nil.name을 평가하는 동안 오류가 발생했습니다" "file.name"과 아래 라인에

이 오류 점.

나는 그것이 nil.name으로 평가되고 비어 있어야하지만 왜 그렇게 코드가 실행되는지 이해하지 못한다.

이 경우에 대한 테스트를 변경하여 작동합니다 ..

if file[0] != nil 

나는 내가 이해이 몇 가지 도움을 주셔서 감사합니다 것 누락 중요한 세부있어 같은 느낌. 내보기에서

나는이 : 컨트롤러에서

<table> 
    <tr> 
    <th>File</th> 
    <th>Description</th> 
    </tr> 

    <% if [email protected]? %> 
    <% @files.each do |file| %> 
    <tr> 
     <td><%= file.name %></td> 
     <td><%= file.description %></td> 
     <td><%= link_to "Download", :controller => "files", :action => "download", :id => file.id %></td> 
     <td><%= button_to "Delete", { :controller => "files", :action => "destroy", :id => file.id }, :method => "delete" %></td> 
    </tr> 
    <% end %> 

    <% else %> 

    <tr> 
    <td><b>No files</b></td> 
    </tr> 

    <% end %> 
</table> 

나는 그들이 만들 때 나중에 값을 밀어 다음 @files라는 빈 배열을 생성합니다.

루비 1.8.7-P72 레일 2.2.2

+2

문제가보기에 없습니다. @files에 nil을 추가하는 컨트롤러에 있습니다. 컨트롤러에서 코드를 게시 할 수 있습니까? –

+1

또한 http://apidock.com/rails/v2.2.1/Object/present%3F를 참조하십시오 ..'! @ files.empty? '대신'@ files.present?'가 될 것입니다. '@files'가'nil' 일 때 (단지 더 멋진 문법) –

+0

단순한'@ files'는 하나 이상의'nil'을 포함합니다. '! [nil] .empty?'는'true' (false가 아닌)를 반환합니다 - 명확하게 말하면,'[nil] .present? '는'true'를 리턴합니다. 사용할 수있는 것은'@ files.compact.each'입니다. 아니면,'@ files'가 처음에는'nil'을 포함하지 않도록하십시오. – Zabba

답변

0

당신이 당신의 @files 인스턴스 VAR에 원하는 것은 하늘의 배열

@files = [] 

또는 실제 File 개체 중 하나입니다

@files = File.all 

하지만 어떻게 든 nil 요소를 포함하는 배열을 생성하는 것 같습니다 (예 :

).
@files = [nil, <#File>, <#File>] 

@file 자체는 nil이 아니며 첫 번째 요소는 0입니다. 따라서, 다음 코드는

[email protected]? 

때문에 @files.is_a? Arraynot @files.nil?에 해당 true

@files.any? 

을 반환합니다. 문제는 해당 컨트롤러에 있어야하며 요소를 @files에 추가하는 것 같습니다.

+0

무엇이든지 가져 주셔서 감사합니다. 위로 방법.이것은 나에게 또 다른 새로운 것이다. [email protected]를 사용 하시겠습니까? 논리가 너무 혼란 스럽습니다. 나는 그것이 배열이 비어 있었기 때문에 그것이 안된다고 생각했을 때 실행 중이 었음을 알았다. 거기에 그것이 사실 이도록하십시오. 그 논리를 사용하려고한다면 ... @ files.empty가 있어야만합니까? == false – johnny2k

+0

@ johnny2k 여러분을 환영합니다. 이것이 당신의 문제를 해결했다면, 문제의 제목을'[해결]'로 바꾸지 말고 왼쪽의 작은 진드기로 대답을 수락하십시오. 당신이 대답을 좋아하면 upvote도 고려해 볼 수 있습니다. 이렇게하면 다른 사람들이 대답이 사실임을 알 수 있습니다. 또한, 답변의 포스터는 이런 식으로 명성을 얻을 수 있습니다. –

+0

나는이 모든 답변을 투표하고 싶지만 아직 평판 수준은 없습니다. – johnny2k

관련 문제