2017-02-16 20 views
0

Я пытаюсь сделать частичный после ajax-вызова, используя скрипт кофе, но не смог его сделать.Сделайте частичное на ajax: успех в coffeescript в рельсах 5

контроллер, который называется по запросу AJAX

def unfollow 
    @user = User.find(params[:follow][:followed_id]) 
    current_user.unfollow!(@user) 
    render json: {result: "success"} 
end 

парциальное: Пользователь/follow.html.erb

<div id="follow_button"> 
    <%=form_for(:follow,url: follow_users_path,remote:true) do |f| %> 
    <%= f.hidden_field :followed_id, value: @user.id %> 
    <%= f.submit "Follow", id: "Follow_button", class: "btn btn-primary" %> 
    <% end %> 
</div> 

Ajax: функция успеха

$ -> 
    $('#unfollow_button').on "ajax:success", (e,data,status,xhr) -> 
    $('#follow_unfollow_button').html("<%= escape_javascript(render partial: 'users/follow') %>") 

HTML, который находится на том месте,

<div id="unfollow_button"> 
     <%=form_for(:follow,url: unfollow_users_path,remote:true) do |f| %> 
     <%= f.hidden_field :followed_id, value: @user.id %> 
     <%= f.submit "Unfollow", id: "unfollow_button", class: "btn btn-primary" %> 
     <% end %> 
</div> 

Я не получаю никакого значения с сервера я просто хочу, чтобы сделать это, когда Аякса успех. Но это выглядит так:

<%= escape_javascript(render partial: 'users/follow') %> 

Как это решить? что мне не хватает?

+0

Как выглядит ваш контроллер? Кроме того, какой файл выполняет функцию ajax: success внутри? –

+0

@MikeDoyle Я добавил их на мой ответ – Pranavadurai

+0

Я обновил ответ. Пожалуйста, дайте мне знать, если это сработает для вас. –

ответ

1

Да, вы не можете отрисовать частичный jp-код, содержащий JavaScript, из json-ответа. Вот как исправить

1) удалить эту строку из контроллера

render json: {result: "success"} 

2) Во просмотров/пользователей/создать файл с именем unfollow.js.coffee со следующим кодом

$('#follow_unfollow_button').html("<%= j render('users/follow') %>") 

3) Вы не более длинная необходимость привязки к функции успеха ajax, поэтому полностью удалите этот код из любого места, где у вас было это

$ -> 
    $('#unfollow_button').on "ajax:success", (e,data,status,xhr) -> 
    $('#follow_unfollow_button').html("<%= escape_javascript(render partial: 'users/follow') %>") 
+0

У меня есть некоторые сомнения в этих шагах. что я должен вернуть на контроллер?. если я удалю ajax: успех, то как я могу сказать, когда это сделать? – Pranavadurai

+0

Действия контроллера Rails пытаются отобразить шаблоны так же, как и их действие. Это довольно простая реализация UJS, которую я иногда использую в своих приложениях. См. Эту страницу http://guides.rubyonrails.org/working_with_javascript_in_rails.html и раздел «Проблемы с сервером» –

2

Не пытайтесь сделать это из файла coffeescript в этом случае. Вместо этого выведите результат из контроллера и верните его как данные в ajax.

1) Изменить контроллер метод

def unfollow 
    @user = User.find(params[:follow][:followed_id]) 
    current_user.unfollow!(@user) 
    render 'users/follow', :layout => false 
end 

2) Изменение JS функция

$ -> 
    $('#unfollow_button').on "ajax:success", (e,data,status,xhr) -> 
    $('#follow_unfollow_button').html(data) 

Как ваш контроллер будет возвращать что-то (а не ошибка), то Аякса: успех будет стрелять вверх и вместо того, чтобы пытаться отобразить его в JS/coffeescript, просто визуализируйте его в контроллере и таким образом, вам также не нужно отображать что-то только ради возврата информации клиенту.

 Смежные вопросы

  • Нет связанных вопросов^_^