Проблема в том, что я не могу получить доступ к данным, полученным в Ajax правильно, мне нужно получить доступ к данным с помощью data.responseJSONfrom.follow, и я хотел бы сделать это с помощью data.follow

def create follow = current_user.user_followings.new(following_id:params[:following_id]) status = follow.save render json: {follow: status ? render_to_string(partial: 'users/follow', locals:{follow: follow, id_to_follow: follow.following_id }) : ''}, status: status ? :ok : :unprocessable_entity end 
 $('#unfollow').bind('ajax:complete', function(xhr, data){ $(this).replaceWith(data.follow); }); 

data.follow — это неразрешенная переменная

Вы можете начать с отладки вашего объекта data в консоли: console.log('data: ', data); должен возвращать данные, которые вам нужны. Если нет, то что-то не так с ответом или методом.

Просто отправьте это как ответ на случай, если у кого-то еще есть подобная проблема. Проблема в том, что вам нужно изменить функцию прослушивания AJAX с .bind() на .on() .

Итак, в вашем случае:

 $('#unfollow').on('ajax:complete', function(xhr, data){ $(this).replaceWith(data.follow); });