2011-06-26 44 views
8

我有一個產品,用戶和類似的模型。用戶可以喜歡產品。我試圖實現一個簡單的按鈕,一旦點擊,就可以讓用戶喜歡產品。然後類似的按鈕變成不同的按鈕,使用戶不同於產品。非常簡單。簡單的像/不像按鈕與導軌3,jQuery和AJAX

我已經實現了上述的模型/控制器邏輯。我對javascript/ajax不是很好,並且想知道實現上述功能的最好方法是什麼。我想通過ajax處理類似/不同的動作。我使用rails 3和jquery ujs作爲我的應用程序。

謝謝。

回答

36

我對你的問題的回答很長,所以我寫了一個example application。這裏有一個片段:

有很多方法來爲這個貓皮膚,但我喜歡渲染一個部分和一個單一的ujs模板。

_like_button.html.erb

<% if like = current_user.likes.find_by_product_id(@product.id) %> 
    <%= form_for like, :html => { :method => :delete }, 
        :remote => true do |f| %> 
    <%= f.submit "Unlike" %> 
    <% end %> 
<% else %> 
    <%= form_for current_user.likes.build(:product_id => @product.id), :remote => true do |f| %> 
    <%= f.hidden_field :product_id %> 
    <%= f.hidden_field :user_id %> 
    <%= f.submit "Like" %> 
    <% end %> 
<% end %> 

toggle.js.erb,其中"#like"是div封裝形式:

$("#like").html("<%= escape_javascript render('like_button') %>"); 
+1

人,其如此真棒,你這樣做。您的示例應用程序確實幫助我理解這是如何工作的Thx一噸! – p01nd3xt3r

+0

謝謝你的客氣話! – dwhalen

+1

@dwhalen,我找不到鏈接的示例應用程序了。我正在嘗試在我的應用程序中執行相同的操作,並且在應用程序中使用了幾乎相同的代碼。第一次在一切正常的時候,Like按鈕就會顯示出來,點擊它就會切換到不同的狀態。但是,當我嘗試點擊不同按鈕時,沒有任何反應。有什麼建議麼? – Anand

1

基本上,爲了讓你的鏈接通過AJAX工作,你只需要提供link_to:remote => true的參數。但我想你想向用戶提供某種反饋。看看this截屏。