首页 > 解决方案 > 为什么这个 ajax:success 调用不起作用?

问题描述

我知道有很多关于这个的线索,但我似乎无法弄清楚这里出了什么问题。我有一个调用类似方法的远程链接。

当我点赞链接...

发生什么事:

应该发生什么:

_like.html.erb

<% recipe = recipe || @recipe %>
<%= link_to unlike_recipe_path(recipe), remote: true, class: "recipe-card__like like" do %>
  <i class="heart icon"></i>
<% end %>

注意:部分呈现在显示页面和索引中,这就是我使用 || 的原因 陈述。

像.js.erb

$('.like').bind('ajax:success', function(){
  console.log('like clicked');
  $(this).closest('.like').hide();
  $(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
});

路线.rb

  resources :recipes do
    resources :likes

    member do
      get "/like", to: "recipes#like"
    end
  end

recipes_controller.rb

  def like
    @recipe = Recipe.find(params[:id])
    @like = @recipe.likes.create(recipe_id: @recipe.id, user_id: current_user["uid"])
    respond_to do |format|
      format.html
      format.js
    end
  end

应用程序.js

//= require jquery
//= require jquery_ujs
//= require rails-ujs
//= require turbolinks
//= require semantic-ui/sidebar
//= require_tree .

标签: ruby-on-railsajax

解决方案


您可以使用 JS/Html/Ajax 以多种方式完成此操作。

#like.js.erb
#if wanna validate the request success or fail use @like
# just make sure @like is not string type otherwise it will always success in JS file.
if("<%= @like %>"){
    console.log('like clicked');
    $(this).closest('.like').hide();
    $(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
}

此外,在控制器中不需要recipe_id: @recipe.id. 它应该自动分配。

@like = @recipe.likes.create(user_id: current_user["uid"])


推荐阅读