2012-04-26 14 views
1

AJAXに関してはちょっと助けが必要です。私はposts_controllerとlikes_controllerを持っています:AJAXの成功後にViewの要素を変更してください

ユーザーは投稿を「好き」できます。今、私はAJAXを実装しようとしているので、ユーザーが投稿を好きなときや、投稿が「好きでない」ときは、like/unlikeが切り替わります。

AJAXの前に、ページはリフレッシュされ、ビュー内のコードは、特定の投稿が現在のユーザーによって好まれているかどうかを判断します。私はビュー内でifステートメントを実行し、結果に応じて、2つの異なるフォームを表示しました。もしその投稿がまだ好きでなければ、投稿を好き(アクションを作成)するフォームがありました。好きだった、ポストと違うという形があった(アクションを破壊する)。

AJAXを使用して作成部分を実装したので、同様のことが動的に発生しますが、ビューは変更されません(端末/レールコンソール経由で作成されたようですが、 )。私は、ページをリフレッシュせずにビューを更新する最良の方法は何ですか?私は '好きな'リンクやフォームを '違う'リンクやフォームに更新する必要があります。 jqueryでこれを行う唯一の方法はありますか?ここ

は私のコードです:ビューの

class LikesController < ApplicationController 

    def create 
    @post = Project.find(params[:like][:likee_id]) 

    respond_to do |format| 
     format.html{ 
     current_profile.like!(@post) 
     redirect_to :back 
     } 
     format.js { 
     current_profile.like!(@post) 
     } 
    end 

    end 
    def destroy 
    @post = Like.find(params[:id]).likee 
    current_profile.unlike!(@post) 
    redirect_to :back 
    end 
end 

likes_controllerスニペット:

%ul.dropdown-menu 
    %li 
    - if current_profile.like?(post) 
     = form_for current_profile.likes.find_by_likee_id(post), :html => { :method => :delete } do |f| 
     %a{:href => "javascript:void(0)", :onclick=>"$(this).closest('form').submit()"} 
      %i.icon-heart.icon-large{:style => "color: #fedc73;"} 
      Unlike this Post 
     - else 
     = form_for current_profile.likes.build(:likee_id => post.id), :remote => true do |f| 
      = f.hidden_field :likee_id 
      %a{:href => "javascript:void(0)", :onclick=>"$(this).closest('form').submit()"} 
      %i.icon-heart-empty.icon-large 
      Like this Post 

create.js.hamlファイル:

:plain 
    $(this).closest('form').submit() 

すべてのヘルプは非常だろう感謝。どうもありがとうございます!

あなたが

$.post('url', data, function(returned_data){ $.('like_div').html(returned_data) }) 

を使用することができますしかし、その代わりに、手動でリンクを作成するのではなく、あなたがレールに1を生成することがありました

+0

私はここで自分の[質問] [1]に答えました。これがあなたに頭をアップさせるかどうか見てください。 [1]:http://stackoverflow.com/questions/10107689/getting-rid-of-form-and-use-just-button-to-create-new-record – Victor

答えて

0

= link_to url_for(...), :remote => true 

「これは、JSが無効になっている場合でも、動作しますが、ADNあなたはドンこれのための任意のフォームが必要です。

- if current_profile.like?(post) 
    = link_to url_for(:controller => :posts, :action => :unlike, :id => post.id), :remote => true 
- else 
    = link_to url_for(:controller => :posts, :action => :like, :id => post.id), :remote => true 

もちろん、この操作は.jsと.htmlに対応する必要があります。後者の場合、ビュー全体をレンダリングすることができ、.jsでは、リンクdivをこの更新されたものに変更するjのスニペットを挿入することができます。それ以上の説明が必要ですか?

関連する問題