为什么此ajax:success调用不起作用?

时间:2018-06-23 17:17:01

标签: ruby-on-rails ajax

我知道这有很多线程,但是我似乎无法弄清楚这里发生了什么。我有一个调用类似方法的远程链接。

当我点击喜欢的链接...

发生了什么事

  • like已创建(按预期)。
  • 页面没有刷新(按预期)。

应如何处理:

  • 以上所有内容以及like.js.erb中的内容更改。我已将console.log添加到此文件,并且在单击“喜欢”链接时不会显示该文件。

_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 %>

注意:局部页面既显示页面又显示索引,这就是为什么我使用||的原因。声明。

like.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 ) %>');
});

routes.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

application.js

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

3 个答案:

答案 0 :(得分:0)

您可以使用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"])

答案 1 :(得分:0)

就像我在评论中说的那样,您.bind('ajax:succeed')的那一刻已经很晚了,因为此文件确实是结果。您的erb文件将在呈现输出之前填充,因此您可以

<% if @result == "success" %>
  console.log('like clicked')
  $(this).closest('.like').hide();
  $(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
<% else %>
  console.log('something went wrong, this person has to many likes')
<% end %>

其中@result是您的控制器变量

答案 2 :(得分:0)

我的链接正在调用unlike方法而不是like方法。简单的错字。

原始

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

应该是什么

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