0

これは私の心を吹き飛ばしています。私はここで助けを求めるだけです。AJAXを「お気に入りに追加」をこのコントローラに追加しますか?

今、私はリソースのリストを持っています。各リソースの中で、誰かがリンクをクリックすることで「お気に入りに追加」することができます。私はそれが通常のリダイレクトで作業を持っていますが、彼らはさわやかなページなしで好きなことができるようにAJAXを統合するためとして、私は完全に失われています...

  1. は、今私はそれがCRUDのためのようだ「置く」アクションとしてそれを持っています'更新'

FavoritesController(アップデートは、このコントローラでのみ動作である)

def update 

    @favorite = Favorite.find_or_initialize_by_resource_id_and_user_id(params[:id], current_user.id) 

    if @favorite.persisted? 
     @favorite.destroy 
    else 
     if @favorite.valid? 
      @favorite.save 
     end 
    end 

    redirect_to root_url 
    end 

マイビュー:

<%= link_to "", favorites_path(:id => resource.id), :class => "star#{star_post?(resource)}", :method => "put" %> 

マイルート:

resource :favorites, :only => [:update] 

マイJS:

$('.res-list .star').click(function(){ 
    $.put('/favorites/?id=' + $(this).attr('data-id')); 
    return false; 
    }); 

答えて

5

これを行うにはいくつかの方法があります。 link_to_functionを使用すると、javascriptメソッドを渡すことができます(ビューまたはapplication.jsで定義した場合は、カスタムメソッドを渡すこともできます)。このメソッドでは、AJAX呼び出しを設定して更新アクションを実行できます。 (jQueryのputマクロを使用して)

ビュー:これを行うには

<%= link_to_function "AJAX Link", "$.put('/favorites/#{resource.id}');" %> 

もう一つの方法は、あなたのリンクに加えてHTMLセレクタを与えることです。もう一度、更新アクションを実行するために少しのjsを書く必要があります。私は<a href="#">タグの代わりに、ボタンを使うのが好きなので、この方法が好きです。 Railsのためにも

+0

ありがとう、私はそれをいくつか持っていると思います。コントローラをrespond_toで更新する必要はありますか? – Tallboy

+0

いいえ、デフォルトのHTML形式は問題ありません。あなたのコントローラはページをレンダリングするルートURLにリダイレクトされますが、AJAXはそれをすべて無視します。あなたはそのネットワークヒットを避けたいなら、あなたは 'respond_to | format |'を持つことができると思います。 – Ron

+0

あなたの助けをありがとう:)私はあなたが気にしないなら、いくつかの非常に簡単な説明があります。私はあなたの2番目の方法で行くと思います。これまでは、お気に入りリンクのclickイベントをキャプチャするJS関数を設定しました。その中に '$ .put( '/ favorites /')'がありますが、現在のIDをどのように渡しますか?私はデータ属性のようなものを使用してそれを読んで、それを要求に挿入しなければなりませんか? – Tallboy

1

私は基本的なjQueryとAjaxの処理にこのRailscastでオフに開始することをお勧めします。これは少し日付がついていますが、かなり安定しており、開始するための基本を提供します。

http://railscasts.com/episodes/136-jquery

それはあなたに、あなたのページ上の要素にAJAX呼び出しをアタッチ要求処理を処理し、ユーザーのためのフォームを更新することを部分的に表示JavaScriptの基本を作る方法についてのアイデアを与えるだろう。

幸運を祈る!

+1

+1(正直けど、私はただbutton_to_functioncontent_tag(:button)代わりcontent_tag(:a)のメソッド呼び出しを作成することになった)3.1を参照してください: http://stackoverflow.com/questions/6405688/rails-3-1-ajax-質問 –

関連する問題