2012-02-23 1 views
5

このアプリでは、ユーザーは埋め込みビデオに投票することができます。ユーザーが上下矢印をクリックすると、ページ全体がリフレッシュされ、pointsが更新されます。私は数ヶ月間AJAX投票を実装しようとしています。たとえそれが最も効率的ではないとしても、あなたが提供できる最も簡単な解決策が欲しいです。何か案は?AjaxでRailsの要素を更新する

app/controllers/links_controller

.... 

    def up 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points + 1 
    redirect_to :back 
    end 

    def down 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points - 1 
    redirect_to :back 
    end 

    .... 

からマイupdownアクション、私は様々なソート方法を使用して、他のビューでレンダリングlinks_listのミニマリストのバージョン、app/views/links/_links_listから部分的、

<% @links.each do |link| %> 
     <div class="row"> 
      <div class="span2"> 
       <%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put %> 
       <%= link.points %> 
       <%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put %> 
      </div> 
      <div class="span8"> 
       <%= link_to strip_tags(link.title), link %> 
      </div> 
     </div> 
    <% end %> 
  • 私は考え外部の宝石の使用なしでこれを達成するためのように、アプリは既に生産中です
  • 私はたぶん、ajaxとレールに関する3つのチュートリアルを見て、ほとんどのレールを試しました。チュートリアルへのリンクを投稿する場合、それが機能するために必要な改造を提案してください。
  • 私は、任意のフィードバックや提案を事前に3.1

おかげで、Railsのを実行していますよ!

答えて

10

AjaxはRails 3.1で使いやすいです。この記事では、JavaScriptドライバとしてjQueryを使用していることを前提としています。そうでない場合は、jquery-railsの宝石をインストールする必要があります。しかし、実稼働中のアプリでさえ、小さな宝石を追加することは本当に大きな問題ではありません。

お使いのコントローラがこのように見えることになります:

.... 

def up 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points + 1 
    respond_to do |format| 
    format.html {redirect_to :back} 
    format.js 
    end 
end 

def down 
    @link = Link.find(params[:id]) 
    @link.update_attribute :points, @link.points - 1 
    respond_to do |format| 
    format.html {redirect_to :back} 
    format.js 
    end 
end 

.... 

ビューの変更はかなり小さくなります。

<% @links.each do |link| %> 
    <div class="row"> 
    <div class="span2"> 
     <%= link_to (image_tag ("up.png")), up_link_url(link), :method => :put, :remote => true %> 
     <%= link.points %> 
     <%= link_to (image_tag ("down.png")), down_link_url(link), :method => :put, :remote => true %> 
    </div> 
    <div class="span8"> 
     <%= link_to strip_tags(link.title), link %> 
    </div> 
    </div> 

そして、あなたは新しいファイルが必要になります、up.js.erbあなたのページを更新するJavaScriptコマンドが含まれているあなたのapp/views/links /フォルダ内のdown.js.erb:

$(".span2").html("This post has <%= @link.points %> points.") 

Prototypeなどを使うことに決めたら、コードは多かれ少なかれ同じように見えるでしょう。唯一の変更はup.js.erbとdown.js.erbに配置するJavaScriptになります。これはjQuery-yではなくPrototype-yにする必要があります。

+0

私はこれを探していましたが、解決策は常に基本的なCRUD ..... thanxでした。 – Magnum

関連する問題