Как вы справляетесь с плохими форматами в Rails 2 маршрутизации? - PullRequest
3 голосов
/ 06 мая 2011

Как справиться с плохими форматами в маршрутах в Rails 2.3? Например, предположим, что у вас есть действие, которое хочет обрабатывать запросы html или json, но не более того, как вы ограничиваете его, позволяя обнародовать читаемые пользователем ошибки? Следующий фрагмент показывает начало:

respond_to do |format|
  format.html # render the default
  format.json { do something appropriate }
  format.all  ?
end

Беда в том, что поставить вместо?, Я попробовал:

  format.all :text => "That's a bad format.", :status => 406

и хотя код состояния установлен правильно, текст не отображается (по крайней мере, в формате, подобном com, который я получаю.

Одной из возможностей может быть изменение файла маршрутов так, чтобы были приняты только два формата, но это приводит к взрыву маршрута. (У меня есть 4 приемлемых формата.) Идея использования

map.connect '/xyz.:format', :action => ..., :controller => ..., :format => '/html|json/'

звучит хорошо, но не работает - это соответствует чему-то вроде xyz.comhtml. Я расстроен и надеюсь, что что-то упускаю.

1 Ответ

2 голосов
/ 06 мая 2011

Я могу ошибаться, но я думаю, что для ваших вызовов format.all вы можете передать ему файл взамен ... что-то вроде этого, где вы также определяете тип возвращаемого значения:

format.all { render :file => File.join(Rails.public_path, '406.html'), :status => 406, :content_type => 'text/html' }

И просто поместите файл «406.html» в публичный каталог с этим текстом «Это плохой формат». в нем.

...