Я просматривал книгу AWDR по веб-разработке с ruby on rails, и одна из проблем со старым кодом заключалась в том, что он не использовал response_to, чтобы убедиться, что используемое представление будет представлением javascript. В некоторых обновленных примерах я видел, как люди упоминали, что они позже при реализации постепенной деградации использовали request.xhr? чтобы узнать, включен ли у пользователя javascript, и если нет, они перенаправляют пользователя.
Мне было интересно, можно ли использовать response_to для получения такого же поведения, и если да, то считается ли это хорошим тоном и почему?
Я собираюсь сделать что-то вроде:
def function
respond_to do |format|
format.js do
basic_stuff
end
format.html do
basic_stuff
user_redirect
end
end
end
Кажется, что это вроде как нарушает принцип DRY, и мне, вероятно, не хватает чего-то о том, как здесь взаимодействуют пользователь и сервер. Если честно, документация по API мне не совсем понятна.





Ну, вы можете провести рефакторинг следующим образом:
def function
basic_stuff # executed regardless of the mime types accepted
respond_to do |format|
format.html do
user_redirect
end
end
# will fall back rendering the default view - which you should ensure will be js
end
request.xhr? просматривает заголовок запроса X-Requested-With (чтобы узнать, содержит ли он «XMLHttpRequest»). respond_to проверяет допустимые типы пантомимы.
Вы можете использовать любой из них, чтобы реализовать своего рода изящную деградацию.
НО Вы не сможете использовать xhr? для постепенной деградации, если ваши вызовы ajax не устанавливают этот заголовок (Prototype делает это автоматически).
Более того, respond_to дает большую гибкость, т.е. отправляет xml, json, js, что бы это ни было, из одного и того же блока.
Так что я бы порекомендовал здесь respond_to.