Правильный способ создания обновлений просмотра в Rails

#ruby-on-rails #ajax

#ruby-on-rails #ajax

Вопрос:

Итак, у меня есть серьезные сомнения на некоторое время. Я вижу, что многие люди используют ajax для выполнения запросов к серверу, когда требуется обновление во внешнем интерфейсе. Но в чем реальная разница между использованием ajax или, например, использованием link_to. Например, у меня есть этот ajax-код, который отправляет запрос серверу на лайк публикации:

 $(function(){
    $(".pos-like").on("click", function(){
        var post_id = $(this).data("id")
        $.ajax({
            url: "/post/like/"   post_id,
            method: "POST"
        }).done(function(response){
            console.log(response)

        })
    })
});
  

Но в другом случае это также работает, если я использую link_to в представлении для того же запроса.

 <%= link_to like_path(post_id: post.id) do %>
     <i class="fa fa-heart fa-2x post-like"></i>
<% end %>
  

Затем в контроллере я просто отображаю часть, которая просто меняет цвет кнопки «Мне нравится» (используя jquery).

Мой вопрос в том, почему люди обычно используют Ajax для создания обновлений, когда они могут просто использовать, например, link_to в представлении. Есть ли какие-либо преимущества при использовании ajax?

Спасибо!!

Комментарии:

1. В вашем link_to примере вы не используете remote: true опцию, и, следовательно, ваш запрос к серверу является HTML запросом, а не JS запросом. Таким образом, вы повторно отображаете всю страницу. Иногда вы можете не захотеть повторно отображать всю страницу и, следовательно, использовать ajax вызов. Кстати, использование remote: true также является ajax , даже если вы не обязательно пишете код javascript, как в вашем первом примере. Кроме того, кстати, не существует «правильного способа» — это зависит от ваших потребностей. Оба описанных вами подхода полностью верны.

2. @jvillian Да, я забыл об удаленном true. Таким образом, оба подхода верны. Большое спасибо!!

Ответ №1:

Удаленные элементы в представлениях Rails — это то, что на самом деле выполняет вызовы Ajax за кулисами. Итак, разница здесь в том, что:

  • В первом примере вы явно вызываете все, что хотите, чтобы вызывалось при нажатии на что-либо
  • Во втором примере вы используете помощников Rails Ajax для достижения той же цели, которая фактически вызовет блок JS, который очень похож на первый пример