저는 사람들이 질문하고 upvote 질문을 할 수있는 매우 간단한 레일 애플 리케이션을 일하고 있습니다. 필자는 실시간 기능을 일부 구축하고 Pusher와 함께하기로 결정했습니다 (주로 heroku를 배포하는 것과 매우 호환되기 때문에). 당신이 새로운 질문을 추가 할 때Pusher 이벤트의 콜백 함수에서 레일을 부분적으로 렌더링합니다.
은 현재 자바 스크립트의 다음 비트가 실행됩니다 :
if $('.question').hasClass('no_current_questions_notice')
$('.no_current_questions_notice').fadeOut 400, ->
$(this).replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>')
$('.last_question').hide().fadeIn 400
else
$('.last_question').removeClass('last_question')
$('#added_question').replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>')
$('.last_question').hide().fadeIn 400
나는 단순히 그래서 내가 AJAX 한 후 무엇을 재현 할 수있는 푸셔 콜백 내 부분 재사용 할 수 있다고 기대했다 푸셔 이벤트를 요청하십시오. 가장 간단한 형태로 아래를 참조
<div class='question last_question'>
<div class='question_content'>
<%= question.content %>
</div>
<%= render 'upvotes/agree', :question => question %>
</div>
<div id='added_question'>
</div>
확인 :
<script type='text/javascript'>
var pusher = new Pusher('<%= Pusher.key %>');
var channel = pusher.subscribe('course-<%= @course.id %>');
channel.bind('create_question', function(data) {
var @added_question = data;
$('#added_question').replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>');
});
</script>
및 참조
이 내 부분입니다. 그래서이 내 페이지를로드하려고 할 때 'nil : NilClass'에 대한 '정의되지 않은 메서드`content'오류가 발생합니다. 이것은 'create-question'이벤트가있을 때까지 질문이 정의되지 않기 때문에 의미가 있습니다. 그러나 Rails가 'create-question'이벤트 전에 그 부분을 렌더링하려고하는 이유를 알지 못합니다. (BTW 내가 확인하고 부분없이, 다른 모든 작품과 데이터가 푸셔에서 보낸 가져옵니다).다른 통합 사례 중 대부분은 클라이언트 쪽 자바 스크립트가 상당히 많았습니다. 내가 자바 스크립트 마법사가 아니므로, 푸시를 통합하기 위해 앱의 프런트 엔드를 다시 할 필요가 없기를 바랬습니다. 내 코드 DRY를 유지하고 Pusher 콜백에서 내 부분을 사용하는 방법이 있습니까?
이 코드는 Rails 4에서 작동하지 않는 것 같습니다. 업데이트 된 코드가 있습니까? – fatfrog