我已经阅读了大量的教程,但我似乎无法让它发挥作用。我正在使用acts_as_votable gem并且当某人“喜欢”某个资源(我的可投票模型)时,我试图加载“不同”部分。
资源索引:
<div class="votes">
<% if (current_user.liked? resource) %>
<!-- Unlike -->
<%= render(:partial => 'unlike', :locals => {:resource => resource})%>
<% else %>
<!-- Like -->
<%= render(:partial => 'like', :locals => {:resource => resource})%>
<% end %>
</div>
资源控制器:
def index
@resources = Resource.all.order(:cached_votes_up => :desc)
end
def like
@resource = Resource.find(params[:id])
@resource.liked_by current_user
respond_to do |format
format.html { redirect_to :back }
format.js { render layout: false }
end
end
路线
Rails.application.routes.draw do
resources :resources do
member do
get "like", to: "resources#like"
get "unlike", to: "resources#unlike"
end
end
end
like.js.erb
$('.like_resource').bind('ajax:success', function(){
$(this).closest('.like_resource').hide();
$(this).closest('.votes').html('<%= escape_javascript (render partial: 'like', locals: { :resource => resource } ) %>');
});
_like.html.erb
<%= link_to like_resource_path(resource), method: :get, remote: true, class: 'like_resource' do %>
<button class="ui basic compact icon right floated button vote_count">
<i class="heart icon" style="color: #F1F1F1"></i> <%= resource.get_likes.size %>
</button>
<% end %>
当前功能 - 当我点击like按钮时,会注册类似的,但是ajax不会加载部分。我需要重新加载页面才能看到更新的不同按钮。
如果我更改like.js.erb文件以包含一个简单的链接而不是加载部分链接,它似乎正确加载。
$('.like_resource').bind('ajax:success', function(){
$(this).closest('.like_resource').hide();
$(this).closest('.votes').html(' <%= link_to "Unlike", unlike_resource_path(@resource), remote: true, method: :get, class: 'unlike_resource' %>');
});
答案 0 :(得分:1)
修复了这个问题!控制台发布了一个500内部错误,但没有提供有关正在发生的事情的洞察力。我跳进了log / development.log并发现了这个错误:
undefined local variable or method `resource'
我在ajax部分局部变量调用中缺少“@”。将最后一行更改为:
$(this).closest('.votes').html('<%= escape_javascript (render partial: 'like', locals: { :resource => @resource } ) %>');