0

質問へのイントロの目的で、アプリケーションのユーザーは、投稿された記事に投票/反対票を投じることができます。次の方法で 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 は記事 (ストレージ) ごとの投票数を保持するスパン要素です。

4

0 に答える 0