3

我正在阅读有关使用 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 文档并没有让我完全清楚。

4

1 回答 1

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 类型。

您可以使用其中任何一个来实现某种优雅的降级。

但是xhr?,除非您的 ajax 调用正在设置该标头(原型自动执行此操作),否则您将无法使用优雅的降级。

此外,respond_to提供更大的灵活性,即发送 xml、json、js,无论它可能来自同一块。

所以我推荐respond_to这里。

于 2008-09-29T17:47:20.077 回答