我有一个产品,用户和类似的模型。用户可以喜欢产品。我试图实现一个简单的按钮,一旦点击,就可以让用户喜欢产品。然后类似的按钮变成不同的按钮,使用户不同于产品。非常简单。简单的像/不像按钮与导轨3,jQuery和AJAX
我已经实现了上述的模型/控制器逻辑。我对javascript/ajax不是很好,并且想知道实现上述功能的最好方法是什么。我想通过ajax处理类似/不同的动作。我使用rails 3和jquery ujs作为我的应用程序。
谢谢。
我有一个产品,用户和类似的模型。用户可以喜欢产品。我试图实现一个简单的按钮,一旦点击,就可以让用户喜欢产品。然后类似的按钮变成不同的按钮,使用户不同于产品。非常简单。简单的像/不像按钮与导轨3,jQuery和AJAX
我已经实现了上述的模型/控制器逻辑。我对javascript/ajax不是很好,并且想知道实现上述功能的最好方法是什么。我想通过ajax处理类似/不同的动作。我使用rails 3和jquery ujs作为我的应用程序。
谢谢。
我对你的问题的回答很长,所以我写了一个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') %>");
基本上,为了让你的链接通过AJAX工作,你只需要提供link_to
和:remote => true
的参数。但我想你想向用户提供某种反馈。看看this截屏。
人,其如此真棒,你这样做。您的示例应用程序确实帮助我理解这是如何工作的Thx一吨! – p01nd3xt3r
谢谢你的客气话! – dwhalen
@dwhalen,我找不到链接的示例应用程序了。我正在尝试在我的应用程序中执行相同的操作,并且在应用程序中使用了几乎相同的代码。第一次在一切正常的时候,Like按钮就会显示出来,点击它就会切换到不同的状态。但是,当我尝试点击不同按钮时,没有任何反应。有什么建议么? – Anand