使用 Rails 3、jquery 和 ajax 的简单喜欢/不喜欢按钮

发布于 2024-11-16 23:33:15 字数 239 浏览 3 评论 0原文

我有一个产品、用户和类似的模型。用户可以喜欢一个产品。我正在尝试实现一个简单的“喜欢”按钮,单击该按钮即可让用户喜欢某个产品。然后,“喜欢”按钮会转变为“不喜欢”按钮,从而允许用户喜欢某个产品。非常简单。

我已经实现了上述模型/控制器逻辑。我不太擅长 javascript/ajax,想知道实现上述功能的最佳方法是什么。我希望通过 ajax 处理类似/不同的操作。我的应用程序使用 Rails 3 和 jquery ujs。

谢谢。

I have a product, user, and like model. A user can like a product. I am trying to implement a simple like button which, upon a click, allows a user to like a product. Then the like button transforms into an unlike button, allowing the user to unlike a product. Pretty straightforward.

I have implemented the model/controller logic for the above. I am not very good with javascript/ajax and was wondering what the best way would be to implement the above functionality. I want the like/unlike actions to be handled via ajax. I am using rails 3 and jquery ujs for my app.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜血缘 2024-11-23 23:33:15

我对你的问题的回答很长,所以我写了一个示例应用程序。这是一个片段:

给这只猫剥皮的方法有很多,但我喜欢渲染部分和单个 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') %>");

My answer to your question is long, so I wrote up an example application. Here's a snippet:

There are many ways to skin this cat, but I like to render a partial and a single ujs template.

_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, where "#like" is the div enclosing the form:

$("#like").html("<%= escape_javascript render('like_button') %>");
彩扇题诗 2024-11-23 23:33:15

基本上,要使您的链接通过 AJAX 工作,您只需提供 link_to:remote =>; true 参数。但我猜你想向用户提供某种反馈。请观看截屏视频。

Basically, to make your links work via AJAX, you just need to provide link_to with :remote => true argument. But I guess you want to make some sort of feedback to the user. Take a look at this screencast.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文