2014-03-11 3 views
0

Я добавил функцию в свой контроллер, чтобы обеспечить способ добавления записи через запрос Get.Как не обрабатывать ответ в Rails

Но мне не нужно отображать страницу или ответ пользователю.

Как предотвратить исключение ошибки в консоли Rails?

Completed 500 Internal Server Error in 10879ms 

ActionView::MissingTemplate (Missing template 

Мой контроллер

def add_testing_record 
    # p request.remote_ip 
    # p params 
    # ap params.class 
    records = params["testing_record"].to_hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} 
    records[:ip] = request.remote_ip 
    binding.pry 

    TestingCounter.create(records) 
    respond_to do |format| 

    end 

    end 

ответ

2

Оба render nothing: true и head { 200 } удалит ошибку, но они также будут вызывать браузер для отображения пустой страницы.

Если вы хотите, чтобы остаться на той же странице, у вас есть два варианта:

  1. делают ту же точку зрения в конце действия.
  2. отправить запрос через ajax и вернуть head.

На втором, ваш взгляд должен содержать что-то вроде этого:

<%= link_to "do_stuff", foobar_path, remote: true %> 

И, в контроллере:

def foobar 
    # process the request 
    respond_to do |format| 
    format.html { 
     flash.now[:success] = "all ok" 
     render "the/same/view/template/the/user/is/currently/seeing" 
    } 
    format.js { 
     head 200 
    } 
    end 
end 

однако, создание ресурсов на ГЭТ плохо. Вы действительно должны использовать POST вместо:

<%= link_to "do_stuff", foobar_path, remote: true, method: :post %> 
+0

там действительно не ответ HTTP разработан, чтобы сказать DO_NOTHING –

+0

Не действительно. Представьте, что с точки зрения браузера: если ответ не возвращается, это означает, что сервер не отвечает (разбился, все еще работает, тайм-аут и т. Д.). Никакой ответ __will__ не будет интерпретироваться как ошибка. С другой стороны, любой из ответов, описанных мной и другими пользователями, отправит ответ _empty_, и браузер будет использовать его соответствующим образом. Для запросов HTML (по умолчанию) браузер ожидает ответа HTML. Пустая означает, что «здесь отображается новая страница. Она пуста, но, пожалуйста, покажите ее». Вот почему вы можете использовать Ajax, чтобы избежать такого поведения. – tompave

1

я предпочитаю использовать

head :ok 

Таким образом, он будет возвращать ответ только с заголовками.

2

Если вы не хотите, чтобы сделать страницу

, то вы можете использовать

respond_to do |format| 
     render nothing: true 
    end 
Смежные вопросы