在RoR 2.x中使用react_to与ajax进行正常降级

时间:2020-03-06 14:53:10  来源:igfitidea点击:

我正在阅读有关Web开发的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查看接受的mime类型。

我们可以使用任何一种来实现某种优雅的降级。

但是,除非ajax调用设置了该标头,否则我们将无法使用xhr?进行优雅降级(Prototype会自动执行此操作)。

此外,respond_to提供了更大的灵活性,即发送xml,json,js,无论它来自同一块是什么。

所以我建议在这里respond_to