Я могу щелкнуть ссылку один раз, и счетчик будет обновляться, но после этого он не обновляется после кликов и не обновляется в базе данных (смотря на консоль).
index.html.haml
.votes
- if current_user.liked? skit
= link_to unlike_skit_path(skit), method: :get, remote: true, class: "unlike-post" do
.upvote
%span.upvote-link
%i.fa.fa-caret-up
.vote-count= skit.votes_for.size
- else
= link_to like_skit_path(skit), method: :get, remote: true, class: "like-post" do
.upvote
%span.upvote-link
%i.fa.fa-caret-up
.vote-count= skit.votes_for.size
routes.rb
resources :skits do
resources :challenges
member do
get "like", to: "skits#like"
get "unlike", to: "skits#unlike"
end
end
в отличие от.js.erb
$('.unlike-post').bind('ajax:success', function(){
$(this).find('.vote-count').html('<%= escape_javascript @skit.votes_for.size.to_s %>');
});
like.js.erb
$('.like-post').bind('ajax:success', function(){
$(this).find('.vote-count').html('<%= escape_javascript @skit.votes_for.size.to_s %>');
});
skits_controller.rb
def like
@skit.liked_by current_user
respond_to do |format|
format.html { redirect_to skits_path, notice: 'Successfully voted!' }
format.js { render layout: false }
end
end
def unlike
@skit.unliked_by current_user
respond_to do |format|
format.html { redirect_to skits_path, notice: 'Successfully voted!' }
format.js { render layout: false }
end
end
РЕДАКТИРОВАТЬ
После применения справки снизу не сохраняет в БД:
Когда он сохраняется в базе данных:
GET
для создания или уничтожения ресурса. GET-запросы сохраняются в истории браузера. Вместо этого используйте что-то вродеPOST /skits/1/likes
для создания лайка иDELETE /likes/:id
для непохожести. - person max   schedule 27.01.2016PUT
, но это не очень RESTful. СкорееPUT /skits/1/like
больше похоже на процедуру. У меня нет времени сегодня, чтобы напечатать полный ответ, извините. Однако это чрезвычайно распространенный сценарий, и вы сможете найти немало примеров в Интернете. - person max   schedule 27.01.2016