2014-10-17 2 views
0

그림 show 페이지에 표시 할 설명의 부분이 _index입니다. 내 미디어보기에서 부분을 렌더링하고부분 변수에 변수를 전달할 수 없습니다.

현재이 좋아 :

내 의견 컨트롤러는 다음과 같습니다
<div id="comments"> 
    <%= render partial: 'comments/index' %> 
</div> 

:

def index 
     @comments = Comment.all 
     render partial: 'comments/index', locals: { :comments => @comments } 
end 

그리고 내가 사용하는 커피 스크립트 코드는 모양 다시로드 이 :

setInterval (=> $('#comments').load('/comments')), 1000 

내보기에서 다음을 시도하면 : comments 변수 th 내가 그 부분에 보내면, 나는 그것을 할 수 없다. 값이 없습니다.

어떻게 부분 값을 올바르게 가져올 수 있습니까?

주목할만한 점은 인스턴스 변수 @comments 또한 내 부분에서 액세스 할 수 없다는 점입니다.

+0

당신이 영리 아무것도하지 않기 때문에 '@ comments' 객체를 사용하면 왜 부분적으로'Comment.all'을 대신 사용하지 않을까요? 당신은 실제로 @@ comments 객체에 접근 할 수 있어야한다. 그래서 뭔가 잘못되어 있어야한다. – Matt

+0

기본적으로 내 @comments는 nil이라고합니다. 현재 내 견해로는 Model의 모든 의견을 수렴하고 있지만보기가 아닌 내 컨트롤러에 맡기고 싶습니다. 도움이되면 index partial은 media_controller라는 다른 컨트롤러에 속한 다른보기로 렌더링됩니다. 어쩌면 그게 문제의 원인일까요? – Kaspar

+0

아, 사실, 첫 번째 페이지로드시 @comments에 값이 없지만 내 coffescript로 다시로드 할 때 수행됩니다. 그러나 여전히 이것은 문제입니다. 나는 같은 부분을 렌더링하고 있으며, 처음 렌더링 할 때 전달한 정보가 없습니다. – Kaspar

답변

2

그림 show 부분에서 index 부분을 렌더링하고 있습니다.

여기에 사용중인 동작은 picture show입니다. 부분 주석을 렌더링 할 때 이 아닌 주석 컨트롤러를 호출합니다. 그렇기 때문에 @comments 변수에 액세스 할 수 없습니다.

그래서 대신에 당신의 사진 컨트롤러

def show 
    @picture = Picture.find(params[:id]) 
    @comments = @picture.comments 
end 

을의 @comments가 그 다음 사진/쇼보기에서 전달할 정의하는 부분

<div id="comments"> 
    <%= render partial: 'comments/index', :locals => :comments => @comments %> 
</div> 
+0

하지만 이제 새로운 의견을보기 위해 매 10 초마다 부분을 업데이트하고 싶습니다. 그림 컨트롤러를 업데이트합니까? – Kaspar

+2

이 railscast를 확인하는 것이 좋습니다. http://railscasts.com/episodes/229-polling-for-changes. 기본적으로 'comments index' 액션에서 매 x 초마다 AJAX 요청을 수행합니다. StackOverflow는 더 현대적인 접근 방식 인'Sockets'을 사용합니다. 그러나 어떻게 작동하는지 전혀 모릅니다 :) –

+0

StackOverflow는 Rails에서도 작성되었습니다! 또한 답변을 주셔서 감사합니다, 나는 또한 링크를 살펴 보겠습니다. – Kaspar

관련 문제