Простая кнопка «нравится / не нравится» с направляющими 3, jquery и ajax - PullRequest
8 голосов
/ 26 июня 2011

У меня есть товар, пользователь и похожая модель. Пользователь может понравиться продукт. Я пытаюсь реализовать простую кнопку «Мне нравится», которая при нажатии позволяет пользователю понравиться продукт. Затем кнопка «Мне нравится» превращается в кнопку «Не нравится», позволяя пользователю отличаться от продукта. Довольно просто.

Я реализовал логику модели / контроллера для вышеуказанного. Я не очень хорошо разбираюсь в javascript / ajax и мне было интересно, как лучше всего реализовать вышеуказанную функциональность. Я хочу, чтобы подобные / непохожие действия обрабатывались через ajax. Я использую rails 3 и jquery ujs для своего приложения.

Спасибо.

Ответы [ 2 ]

36 голосов
/ 26 июня 2011

Мой ответ на ваш вопрос длинный, поэтому я написал пример приложения . Вот фрагмент кода:

Есть много способов снять шкуру с этой кошки, но мне нравится визуализировать частичный и единственный шаблон 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 голос
/ 26 июня 2011

По сути, чтобы ваши ссылки работали через AJAX, вам просто нужно предоставить link_to с аргументом :remote => true.Но я думаю, что вы хотите сделать своего рода обратную связь с пользователем.Взгляните на эту заставку.

...