2012-05-12 70 views
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="#">標籤。 (雖然老實說,我結束了剛剛創建button_to_function方法調用的content_tag(:button)代替content_tag(:a)

+0

謝謝,我想我有一些。我需要用respond_to來更新我的控制器嗎? – Tallboy

+0

不,你的默認HTML格式將會很好。你的控制器將重定向到將會呈現頁面的根網址,但AJAX忽略所有這些。如果你想避免網絡衝擊,我想你可以有不同的'respond_to | format |'。 – Ron

+0

感謝您的幫助:)如果您不介意,我有一些超級簡要說明。我相信你的第二種方法。到目前爲止,我設置了一個JS功能,它捕獲收藏夾鏈接上的點擊事件。裏面,我有'$ .put('/ favorites /')'但我如何傳入當前ID?我會不得不使用類似於數據屬性的東西,讀取它並將其插入到請求中? – Tallboy

1

我會建議在基本jQuery和Ajax處理的出發與此Railscast。這有點過時了,但仍然非常堅實,並且會爲您提供基本知識來幫助您入門。

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

它會給你如何Ajax調用附加到元素的網頁上,處理的請求處理,製作一個基本的JavaScript瀏覽部分,將更新用戶形式的想法。

祝你好運!

+1

+1也爲Rails 3.1參見: http://stackoverflow.com/questions/6405688/rails-3-1-ajax-問題 –