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

时间:2015-05-14 18:51:03

标签: ruby-on-rails ajax model-view-controller

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

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

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

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

用户还需要能够删除线索被移除的线索等...

这需要通过AJAX实现。

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

说他从/ Investigation使用InvestigationController加载了页面。

InvestigationController应该是调用模型添加/删除线索的人,还是某种数据控制器应该这样做。

例如:

/Investigation/AddClue

或其他控制器

/User/Clues/Add

我问的原因是我在我的页面上创建/添加/修改了很多数据,我想知道我的路由/控制器是否应该与数据操作和页面分开,或者我是否应该有一个控制器对于每个页面,它还管理用户可以在该页面上执行的操作(例如添加/删除ClueBox中的线索)

由于

2 个答案:

答案 0 :(得分:1)

理想情况下,您需要为每个资源配备一个单独的控制器。即使您当前的视图位于resources :investigations do resources :clues end 控制器的上下文中,处理线索也应该有自己的资源。否则事情会变得复杂。如果线索是特定于调查的,那么您可以将它们放在调查URL下。

/investigations/1/clues/1

这会给你类似create.js.erb的东西,但这可能没有必要,除非有必要,否则我会避免嵌套。

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

答案 1 :(得分:0)

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

resources users do
  resources clues
end

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