Что означает: формат в градирнях

Я печатаю маршруты рейка, и я получаю кучу URL-адресов, подобных этому - /articles/:id(.:format)

Мой вопрос: что означает .:format? Из статьи Rails Guides Routing не ясно, и нет других полезных совпадений для .:format в StackOverflow или google. Существует аналогичный формат /:controller(/:action(/:id(.:format))), который я также не понимаю.

Спасибо

Дальнейший вопрос EDIT -

Если бы я хотел только направить HTML-страницы. Было бы лучше всего указать что-то вроде.: Html в маршруте или использовать.: Format и просто написать блок reply_to для format.html? Будут ли проигнорированы все другие форматы в последнем случае?

Ответы

Ответ 1

Это формат запрашиваемого файла. Например, если вы хотите изображение, у вас, вероятно, будет расширение файла в запросе - например, example.com/example_image.png предоставит вам формат как png. Затем этот запрос включается в запрос, поэтому вы можете изменять тип ответа на основе запрошенного формата.

Для примера использования вы можете позволить ресурсу быть представленным как pdf, как обычную html-страницу и как json - вы, вероятно, напишете что-то вроде этого:

respond_to do |format|
  format.html { ... }
  format.pdf { ... }
  format.json { ... }
end

Затем имеют отдельные вызовы рендеринга в соответствующих форматах.


EDIT:

Объяснение GET /:controller(/:action(/:id(.:format))) :controller#:action -

Сначала немного о форматировании. Скобки означают, что данный фрагмент данных является необязательным. Двоеточие означает, что любая строка, которую он находит в соответствующем URL-адресе, должна быть передана контроллеру в хеше params.

Это, по сути, подстановочный знак, будет пытаться соответствовать очень большому количеству запросов к контроллеру. Например, скажем, это ваш единственный маршрут, и кто-то пытается получить "/users". Это отобразит users в UsersController и по умолчанию вызовет/отринит index внутри него. Если кто-то получит users/new, будет вызвано действие new в контроллере. Если вызываются id и format, они также будут переданы вместе с контроллером.

Ответ 2

: формат соответствует типу mime.

Например, если вы отправляете запрос, ищущий index.html, формат ловит 'html' как: format.

Затем в вашем контроллере он будет обработан чем-то вроде

respond_to do |format|
  format.html { #do something like redirect in here }
end