我正在阅读关于使用ruby on rails进行Web开发的AWDR书籍,旧代码的一个问题是它没有使用respond_to来确保使用的视图是javascript视图。现在在一些更新的例子中我看到人们稍后提到它们,在实现优雅降级时,请使用request.xhr?判断用户是否启用了javascript,如果没有,则会重定向用户。
我想知道你是否可以使用respond_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文档并没有让我完全清楚。
答案 0 :(得分:2)
你可以像这样重构:
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
查看接受的mime类型。
您可以使用其中任何一种来实现某种优雅的降级。
但是除非您的ajax调用设置了该标头(Prototype会自动执行此操作),否则您将无法使用xhr?
进行正常降级。
此外,respond_to
提供了更大的灵活性,即发送xml,json,js,无论它来自同一个块。
所以我在这里推荐respond_to
。