2011-06-26 31 views
8

Tôi có kiểu sản phẩm, người dùng và mô hình tương tự. Người dùng có thể thích một sản phẩm. Tôi đang cố gắng thực hiện một nút đơn giản như vậy, khi nhấp chuột, cho phép người dùng thích sản phẩm. Sau đó, nút tương tự biến thành nút không giống, cho phép người dùng không giống như một sản phẩm. Khá đơn giản.Nút đơn giản giống như/không giống như các thanh ray 3, jquery và ajax

Tôi đã triển khai logic mô hình/bộ điều khiển cho ở trên. Tôi không phải là rất tốt với javascript/ajax và đã tự hỏi những gì cách tốt nhất là để thực hiện các chức năng trên. Tôi muốn các hành động giống như/không giống như được xử lý thông qua ajax. Tôi đang sử dụng đường ray 3 và jquery ujs cho ứng dụng của mình.

Cảm ơn.

Trả lời

36

Câu trả lời của tôi cho câu hỏi của bạn dài, vì vậy tôi đã viết một số example application. Dưới đây là một đoạn trích:

Có nhiều cách để làm da mèo này, nhưng tôi muốn hiển thị một phần và một mẫu ujs duy nhất.

_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, nơi "#like" là div kèm theo các hình thức:

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

Man, nó rất tuyệt vời mà bạn đã làm điều này. Ứng dụng mẫu của bạn thực sự đã giúp tôi hiểu cách hoạt động của ứng dụng này. Thx một tấn! – p01nd3xt3r

+0

Cảm ơn các bạn đã từ! – dwhalen

+1

@dwhalen, tôi không thể tìm thấy ứng dụng mẫu được liên kết nữa. Tôi đang cố gắng làm điều tương tự trong ứng dụng của mình và tôi có mã giống hệt nhau trong ứng dụng của mình. Lần đầu tiên xung quanh tất cả mọi thứ hoạt động tốt, nút Like xuất hiện, và khi nhấp vào nó, nó chuyển sang không giống như vậy. Tuy nhiên, khi tôi cố gắng bấm vào nút không giống, không có gì xảy ra. Bất kỳ đề xuất? – Anand

1

Về cơ bản, để các liên kết của bạn hoạt động qua AJAX, bạn chỉ cần cung cấp link_to với đối số :remote => true. Nhưng tôi đoán bạn muốn thực hiện một số phản hồi cho người dùng. Hãy xem this screencast.

Các vấn đề liên quan