Всегда используйте responds_to?

До сих пор я всегда указывал формат ответа для действий с помощью responds_to блока, как так:

responds_to do |format|
  format.js { render :json => @record }
end

Недавно я понял, что, если Вы только поддерживаете один формат (как в вышеупомянутом примере), Вам действительно не нужен тот блок. Это - лучшая практика, чтобы оставить его внутри или удалить его?

6
задан tfwright 22 January 2010 в 23:32
поделиться

3 ответа

Я собираюсь отличаться с существующими ответами - мне нравится иметь blacks_to блок для всех моих действий. Я обнаруживаю, что в то время как немного более многословным, он более четко документирует действие. Это также позволяет легко поддерживать дополнительные форматы в будущем. Редактировать: Другое преимущество - это действует как привратник. Любой формат, не объявленный в блоке, автоматически обслуживается «406 не приемлемым»

2
ответ дан 17 December 2019 в 20:32
поделиться
- [11106869-

Я не совсем уверен, что это лучшая практика или нет, но обычно то, что мне нравится делать, это оставить маршруты, открытые для ответа_то (т. Е. Применение .: Формат До конца), но используйте его только в контроллерах, когда это необходимо.

Пример:

Маршруты.rb

map.connect :controller/:action/:id.:format

Model_Controller.rb

# Return a collection of model objects
def action_with_multiple_responses
  @models = Model.all

  respond_to do |format|
    format.html #=> action_with_multiple_responses.html
    format.xml  { render :xml => @models }
  end
end

# Return the first model object
def action_with_one_response
  @model = Model.first
end

Таким образом, вы не загромождаете свой метод Action_With_One_Response с ненужным блоком, но вы также настроили себя Неплохо, если вы хотите когда-нибудь вернуть свой объект в XML, JSON и т. Д.

0
ответ дан 17 December 2019 в 20:32
поделиться

Я бы сказал, что не следует использовать функцию respond_to, если только у вас нет нескольких типов ответа.

Это просто дополнительный код для понимания и обработки вашего приложения:

render :json => @record

намного лаконичнее, чем:

responds_to do |format|
  format.js { render :json => @record }
end
0
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: