これは私の心を吹き飛ばしています。私はここで助けを求めるだけです。AJAXを「お気に入りに追加」をこのコントローラに追加しますか?
今、私はリソースのリストを持っています。各リソースの中で、誰かがリンクをクリックすることで「お気に入りに追加」することができます。私はそれが通常のリダイレクトで作業を持っていますが、彼らはさわやかなページなしで好きなことができるようにAJAXを統合するためとして、私は完全に失われています...
- は、今私はそれが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;
});
ありがとう、私はそれをいくつか持っていると思います。コントローラをrespond_toで更新する必要はありますか? – Tallboy
いいえ、デフォルトのHTML形式は問題ありません。あなたのコントローラはページをレンダリングするルートURLにリダイレクトされますが、AJAXはそれをすべて無視します。あなたはそのネットワークヒットを避けたいなら、あなたは 'respond_to | format |'を持つことができると思います。 – Ron
あなたの助けをありがとう:)私はあなたが気にしないなら、いくつかの非常に簡単な説明があります。私はあなたの2番目の方法で行くと思います。これまでは、お気に入りリンクのclickイベントをキャプチャするJS関数を設定しました。その中に '$ .put( '/ favorites /')'がありますが、現在のIDをどのように渡しますか?私はデータ属性のようなものを使用してそれを読んで、それを要求に挿入しなければなりませんか? – Tallboy