2 년 동안 Rails에서 작업 해 왔지만 AJAX 및 Javascript에서 처음 시도한 것입니다. & 무엇을 해야하는지 알아 내려고 노력하면서 엄청난 시간을 여러 웹 사이트를 읽는 데 보냈습니다.값이 변경되면 AJAX로 새로 고침하면 Rails 4를 사용하여 데이터베이스에서 한 값을 폴링하는 방법
'stories'테이블의 'turn'필드가 변경 될 때마다 레일스 4 응용 프로그램에서 edit.html.erb의 'refreshme'div를 새로 고치려고합니다. 그래서 story.js에서 @ story.turn을 확인하기 위해 setInterval() 함수를 작성했습니다 & 새로 고침. 나는 매 10 초마다 새로 고침을 얻을 수 있지만, 코드를 으로 변경하려면마다 10 초마다 story.turn의 값을 확인하십시오. 값이 변경되면 & 새로 고침 만하십시오.
routes.rb (이 맞나요?)
match '/stories/:id/refresh' => "stories#refresh", :as => :story_refresh, via: 'post'
refresh.html.erb (보기/이야기 - 내가 여기에 속한 것을 단서가 없다)
<div class="pollme" data-story-id="<%[email protected] %>" data-story-turn="<%[email protected] %>" >
<%[email protected] %> // This gets changed based on what other users are editing
</div>
edit.html합니다. ERB (보기/이야기) -이
<div class="refreshme" data-story-id="<%[email protected] %>" data-story-turn="<%[email protected] %>" >
<%= render 'shared/micropost_form' %>
</div>
story.js를 div에로 show.html.erb 멋지게 새로 고쳐
,$(document).on("page:change", function() {
var $turn;
$turn = $('.refreshme').data('story-turn');
refreshStories = function(){
$.ajax({
type: "POST",
data: { }, // I'm sure something important goes here to get @story.turn out of the stories table
url: "/stories/"+$('.refreshme').data('story-id')+"/refresh"
}).done(function(result) {
alert('done');
$turn = ; // Not sure what data{} can return
})
if ($('.refreshme').data('story-turn') != $turn) {
$.ajax({
type: "GET", // helps show.html.erb get refreshed into refreshme div in edit.html.erb
url: "/stories/"+$('.refreshme').data('story-id')
}).done(function(result) {
var $sentence_requests = $('.refreshme');
if ($sentence_requests.length > 0) {
$sentence_requests.html(result);
alert('UPDATED micropost requests ') ;
} else {
}
})
}
};
setInterval(refreshStories, 10000);
});
story.js에서
def refresh
@story = Story.find(params[:id])
respond_to do |format|
format.json { }
format.html { }
end
end
def edit
@story = Story.find(params[:id])
@micropost = @story.microposts.build
respond_to do |format|
format.json { }
format.html { }
end
end
에서, GET 기능 실행 stories_controller.rb 그러나 POST 기능하지 않는다. 나는 내가 'POST'(데이터베이스에서 가치를 얻고 있다고 생각했지만, 그렇지 않은 것)라고 생각하는지 확신 할 수 없다.
나는 POST가 story 테이블에서 @ story.turn을 얻는 데 필요한 AJAX 함수라고 생각하지만, 아무것도하지 못하게하는 방법을 알고있다. 새로 고침하려면 GET이 필요합니까? 나는이 코드를 몇 주 동안 kludging했는데, 이것은 지금까지 알아야 할 것 같다. 어떤 도움이라도 대단히 감사하겠습니다.
OK, 조, 여기 내 레포입니다. https://github.com/crowdpublishtv/sentenceZing RailsCast 229를 시도했기 때문에 조금 편집했는데, 그것이 내가 원하는 것을 실제로하지는 않습니다. 스토리 파트너가 자신의 스토리 마이크로 포스트를 입력 한 후 마이크로 포스트 텍스트 상자가 표시되도록 @ story.turn을 업데이트해야합니다. 구현을 보려면 http://sentenceZing.com을 참조하십시오. – CrowdPublishTV
나는 훑어 보았지만, 프로젝트가 깨진 상태에있다 : rake db : 마이그레이션이 깨끗한 설치에서 실패한다 : –
나는 훑어 보려고했으나 프로젝트가 깨진 상태에있다 : rake db : migrate fails on 새로 설치 : SQLite3 :: SQLException : 테이블이 없습니다 : 좋아하는 : ALTER TABLE "likes"ADD "user_id"정수를 입력하십시오. 더 많은 시간을 할애하지는 않겠지 만 내 질문은 : POST가 필요 하신가요? 필요한 것은 끝점에 도달하는 AJAX GET뿐입니다. 해당 끝점에서 DB 쿼리를 수행하고 "이 값이 변경되지 않았습니다"라는 충분한 정보를 제공하는 응답을 반환하십시오. 그런 다음 그 응답에 따라 행동하십시오. POST가 필요하지 않으므로 서버의 데이터를 변경해야합니다. –