Rails を使って数年になりますが、AJAX と Javascript を試すのはこれが初めてです。さまざまな Web サイトを読むのに膨大な時間を費やし、何がどこにあり、何をすべきかを理解しようとしました。
「ストーリー」テーブルの「ターン」フィールドが変更されるたびに、Rails 4 アプリで edit.html.erb の「refreshme」div を更新しようとしています。そこで、story.js に setInterval() 関数を書き、@story.turn と refresh をチェックしました。10 秒ごとに更新するようにできますが、コードで story.turn の値を 10 秒ごとにチェックし、値が変更された場合にのみ更新するようにしたいだけです。
routes.rb (そうですか?)
match '/stories/:id/refresh' => "stories#refresh", :as => :story_refresh, via: 'post'
refresh.html.erb (ビュー/ストーリー内 - ここに何があるのかわかりません)
<div class="pollme" data-story-id="<%=@story.id %>" data-story-turn="<%=@story.turn %>" >
<%=@story.turn %> // This gets changed based on what other users are editing
</div>
edit.html.erb (ビュー/ストーリー) - show.html.erb はこの div にうまく更新されます
<div class="refreshme" data-story-id="<%=@story.id %>" data-story-turn="<%=@story.turn %>" >
<%= render 'shared/micropost_form' %>
</div>
ストーリー.js
$(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);
});
stories_controller.rb
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
story.js では、GET 関数は実行されますが、POST 関数は実行されません。何を「POST」すればよいのかわかりません (データベースから値を「取得」していると思っていましたが、そうではないと思います)。
POST は、ストーリー テーブルから @story.turn を取得するために必要な AJAX 関数だと思いますが、何かを行う方法がわかりません。リフレッシュするには GET も必要ですか? 私はこのコードを何週間も考え続けてきました。どんな助けでも大歓迎です。