2014-02-12 4 views
2

Я пытаюсь сделать вызов ajax, который либо выбирает пользователя, либо получая электронные письма. Когда пользователь нажимает кнопку для этого, я не хочу, чтобы страница перезагружалась, я только хочу отправить сообщение на сервер, на котором пользователь выбирает или не получает электронные письма.Почему мой вызов ajax делает пустую страницу? (ruby-on-rails)

JS:

opt: function(event) { 
    event.preventDefault(); 
    var $this = $(this); 
    $.ajax({ 
    type : 'PUT', 
    url : $this.attr('href'), 
    dataType : 'html', 
    success : function(html) { 
     $this.addClass('active'); 
    } 
    }); 
} 

Опц действия в контроллере пользователя:

def opt 
    @user = User.find(params[:id]) 
    if @user.no_emails == false 
    @user.no_emails = true 
    @user.save 
    else 
    @user.no_emails = false 
    @user.save 
    end 
    render :nothing => true, :status => 200 
end 

При нажатии на кнопку, которая вызывает функцию все это делает привести меня на пустую страницу, я считаю, часть render :nothing => true, :status => 200 - вот что вызывает проблему, но я не уверен.

+2

В качестве альтернативы '@ user.toggle (: no_emails) .save' отлично подходит для замены вашего условного. – Josh

ответ

1

Вы правы. render :nothing => true ничего не делает. Если вы хотите, вы можете сделать redirect_to :back, и это вернет пользователя на последнюю посещенную страницу.

EDIT

Попробуйте добавить :remote => true к кнопке.

+0

Я не хочу, чтобы страница перезагружалась вообще, это цель вызова ajax. – Snubber

+1

О, хорошо. Попробуйте добавить ': remote => true' к вашей кнопке. – miahabdu

+0

Это сработало, спасибо вам большое спасибо – Snubber

0

Обычно, когда это происходит со мной, это потому, что на странице есть ошибка javascript, которая предотвращает вызов event.preventDefault();.

0

Добавление :remote => true к link_to заставило его работать.

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