Объясните разницу между ActionController # response_to и ActionController :: reply_to

Я читал документацию, и это меня сбивает с толку каждый раз, потому что это не отвечает на некоторые основные вещи. Я понимаю, что основная цель метода класса ::respond_to (который обычно используется в верхней части контроллера) используется для использования вместе с respond_with. И цель метода экземпляра #respond_to (обычно в конце каждого действия) заключается в предоставлении разных ответов для разных форматов.

Я также знаю, что можно объединить версию метода экземпляра, чтобы выглядеть как метод класса, но используется внутри действия для краткости, например: respond_to(:html). Вариант использования для этого - другая цель #respond_to, которая заключается в отказе от запросов для неуказанных форматов. (Я думаю, что это вызывает исключение UnspecifiedFormat)

Является ли метод класса одинаковой функциональностью? Например, если у меня есть контроллер, который отвечает только за html, если я просто поставлю respond_to(:html) в верхней части файла, могу ли я ожидать, что он откажется от запросов для других форматов? У меня были проблемы с этим, так что я не знаю, выполнял ли я что-то неправильно или просто не должен работать так же, как метод экземпляра в этом отношении.

1 ответ

Итак, я, наконец, провел эксперимент, и нет, метод класса respond_to НЕ отсылает запросы к неуказанным форматам, как это делает метод экземпляра. Какой-то путаный дисбаланс, но там у вас это есть. Если вы хотите отказаться от запросов на недопустимые форматы (с 406), вам нужно указать допустимые форматы внутри каждого действия каждого контроллера (используя метод экземпляра respond_to)

licensed under cc by-sa 3.0 with attribution.