我应该如何使用 AJAX 更新数据?

How should I be updating data with AJAX?

我正在制作一个 rails MVC 风格的应用程序。

当我加载页面时,控制器从模型中获取数据并将其转发给视图,然后视图自行呈现。

但是,我想知道在 javascript 和我的数据库之间进行交互的合适方法是什么。

假设用户正在玩游戏,屏幕上有一堆线索。点击一个线索会将其移动到他的线索框,需要更新 UserClues 模型来添加线索。

用户还需要能够在线索被移除的地方移除线索等...

这需要通过 AJAX 实现。

我想知道合适的方法是什么。

假设他从 /Investigation 获取他的页面,该页面使用 InvestigationController 加载页面。

InvestigationController 应该是调用模型以 add/remove 线索的那个,还是应该由某种数据控制器来做。

例如:

/Investigation/AddClue

或另一个控制器

/User/Clues/Add

我问的原因是我的页面上有很多数据 created/added/modified 我想知道我的 routes/controllers 是否应该分开进行数据操作和页面,或者我是否每个页面都应该有一个控制器,它还管理用户可以在该页面上做什么(比如在 ClueBox 中添加/删除线索)

谢谢

理想情况下,您希望每个资源都有一个单独的控制器。即使您当前的视图位于 Investigations 控制器的上下文中,处理线索也应该有自己的资源。否则事情会变得复杂。如果线索是特定于调查的,那么您可以在调查 URL.

下确定它们的范围
resources :investigations do
  resources :clues
end

这会给你类似 /investigations/1/clues/1 的东西,但这可能不是必需的,除非需要,否则我会避免嵌套。

然后控制器可以以正确的格式响应。在这种情况下 Rails UJS 为您提供了您需要的工具。您可以呈现 create.js.erbdestroy.js.erb 模板来处理用户操作。模板将具有更新屏幕状态所需的 JavaScript 和动态代码。

如果可能,请尝试使用 Rails' RESTful 路线。在这种情况下,这可能意味着您的路线文件中的行看起来像:

resources users do
  resources clues
end

在您的 users/clues_controller.rb 文件中,为不同的 AJAX 请求添加操作,例如 create 以向用户添加线索(通过 POST请求),destroy 从用户删除线索的操作(通过 DELETE 请求,可能需要使用 POST + "_method=delete" 参数进行模拟)。