2012-10-14 2 views
0

나는 여러 사용자가 서로를 베팅 할 수있는 앱을 가지고 있습니다. 사용자가 새로운 베팅을 게시하면 베팅은 다른 모든 사용자 홈 페이지에 표시되어야하므로 원할 경우 조치를 취할 수 있습니다.Heroku에서 푸시 버튼으로 페이지 새로 고침

문제는 새로운 베팅이 생성 될 때 홈 페이지를 자동으로 새로 고침해야한다는 것입니다. 간단한 HTTP 새로 고침을 사용하고 싶지 않습니다. Spuser가 Heroku에서 호스팅되기 때문에 Pusher를 사용할 생각입니다.

하지만 이것을 구현하는 방법에 대해서는 잘 모르겠습니다. 누구든지 올바른 방향으로 나를 안내 할 수 있습니까?

그것은 내가 찾을 수있는 모든 예제는 채팅 응용 프로그램 : 시계가이 railscasts

+0

푸셔를 사용하면 페이지가 새로 고쳐지지 않습니다. 열려있는 WebSocket 연결을 통해 데이터를 전달한 다음 해당 데이터를 사용하여 페이지를 업데이트 할 수 있습니다. 이와 같은 기술의 목적은 페이지 새로 고침의 필요성을 제거하는 것입니다. 이것은 웹 브라우저에서 풍부한 대화 형 응용 프로그램을 만들 수있는 퍼즐의 한 부분입니다. – leggetter

+0

고마워.하지만 데이터베이스에 새 쿼리를 트리거 할 수 없다. 내가 원하는 일이다. 사용자가 새 내기를 만들면 모든 클라이언트가 새로 고쳐지기를 기대하는 웹 페이지에서이 BET가 포함 된 DIV를 원합니다 (데이터베이스에 새 쿼리로 부분을 다시 렌더링). – Twiddr

답변

4

체크 아웃 푸셔의는 page을 시작할 수 있습니다. 이것은 매우 솔직해야합니다. Bet 모델이 있다고 가정합니다. 이 경우 귀하의 의견에

class Bet < ActiveRecord::Base 
    after_commit :push_notification, :on => :create, :if => :persisted? 

    def push_notification 
    Pusher["bets"].trigger("created", {:id => id, :message => "New bet created"}.to_json) 
    end 
end 

당신이 일을해야에서는

var pusher = new Pusher('abc243231a132b21c321'); // Replace with your app key 
var channel = pusher.subscribe('bets'); 


channel.bind('created', function(data) { 
    alert('A new bet was created: ' + data.message); 
}); 

당신이 생각을 바랍니다.

+0

그건 .. 작동하는 것 같지만 Alert 대신 ID # 티켓으로 DIV를 새로 고침해야합니다. 어떻게 위의보기 코드를 변경하여이를 수행합니까? – Twiddr

+0

클라이언트 측 (브라우저)에 원시 html을 생성하여 신속하고 더러운 방식으로 보여줄 수 있습니다. 그러나 원시 HTML을 생성하는 것이 장기적으로 관리 할 수 ​​없기 때문에 이것은 최선의 방법은 아닙니다. 'channel.bind ('생성', 기능 (데이터) { $ ("# 티켓") ("

"+ data.message +"
"을 추가). })'당신은의 일환으로이 전체 HTML 렌더링 고려할 수 json 응답을 사용하면이 메시지 만 별도로 볼 수 있습니다. – Deepak

+0

나는 비슷한 것을 가지고 놀았다 : $ ("# bets"). html ("<% = escape_javascript render 'shared/active_bets'%>");'. 하지만 컨트롤러에서 새로 생성 된 베팅은 가져 오지 않습니다. 부분적으로 처음부터 렌더링 할 수 없습니까? – Twiddr