Почему этот Ajax: успех вызова не работает? - PullRequest
0 голосов
/ 23 июня 2018

Я знаю, что об этом есть куча тем, но я не могу понять, что здесь сломано.У меня есть удаленная ссылка, которая вызывает подобный метод.

Когда я нажимаю ссылку «Нравится» ...

Что происходит:

  • Создается 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 ) %>');
});

rout.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 голосов
/ 23 июня 2018

Как я уже сказал в комментарии, в тот момент, когда вы .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 - переменная вашего контроллера

0 голосов
/ 23 июня 2018

Моя ссылка вызывала метод 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 %>
0 голосов
/ 23 июня 2018

Вы можете сделать это разными способами, используя 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"])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...