2011-06-26 129 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截屏。