質問へのイントロの目的で、アプリケーションのユーザーは、投稿された記事に投票/反対票を投じることができます。次の方法で 2 つの非安静ルートを定義しました。
get 'vote_up/:storage_id' => 'home#vote_up', :as => 'vote_up'
get 'vote_down/:storage_id' => 'home#vote_down', :as => 'vote_down'
<%= link_to image_tag("up1.png"), vote_up_path(post.storage_id), :class => "vote_up" %>
<%= link_to image_tag("down1.png"), vote_down_path(post.storage_id), :class => "vote_down", :remote => true %>
したがって、最初のリンクは を使用せず:remote => true
、2 番目のリンクは使用します。
「標準」の Ajax と言うときは、vote_up アクションに使用します。次のことを意味します。
#ホームコントローラー内
def vote_up
storage = Storage.find(params[:storage_id])
storage.vote.count += 1
storage.vote.save
render :json => {:votes => storage.vote.count, :id => params[:storage_id]}
end
したがって、ユーザーがvote_upボタンをクリックすると、ブラウザは次のajaxリクエストを送信します:
# assets/javascript/home.js
$(function() {
$('.vote_up').click(function() {
$.get($(this).attr('href'), function(data) {
var selector = "#like_counter-" + data.id;
$(selector).html(data.votes);
});
return false;
});
});
私の質問は、この方法と:remote=>true
以下に説明されている方法の違いは何ですか。技術的な観点からは、何もありませんか? :remote => true
より「レール指向」であるため、それが優先されると思いますか?
#ホームコントローラー内
def vote_down
@storage = Storage.find(params[:storage_id])
@storage.vote.count -= 1
@storage.vote.save
respond_to do |format|
format.js
end
end
#ビュー/ホーム/vote_down.js.erb
$(function() {
var selector = "#like_counter-" + '<%= @storage.id %>';
$(selector).html('<%= @storage.vote.count %>');
});
すべての例で、selector は記事 (ストレージ) ごとの投票数を保持するスパン要素です。