我正在制作一个rails MVC风格的应用程序。
当我加载页面时,控制器从模型中获取数据并将其转发到视图,视图呈现自己。
但是,我想知道在javascript和我的数据库之间进行交互的恰当方式是什么。
假设用户正在玩游戏,他在屏幕上有一堆线索。单击线索将其移动到他的线索框,需要更新UserClues模型以添加线索。
用户还需要能够删除线索被移除的线索等...
这需要通过AJAX实现。
我想知道适当的方法是什么。
说他从/ Investigation使用InvestigationController加载了页面。
InvestigationController应该是调用模型添加/删除线索的人,还是某种数据控制器应该这样做。
例如:
/Investigation/AddClue
或其他控制器
/User/Clues/Add
我问的原因是我在我的页面上创建/添加/修改了很多数据,我想知道我的路由/控制器是否应该与数据操作和页面分开,或者我是否应该有一个控制器对于每个页面,它还管理用户可以在该页面上执行的操作(例如添加/删除ClueBox中的线索)
由于
答案 0 :(得分:1)
理想情况下,您需要为每个资源配备一个单独的控制器。即使您当前的视图位于resources :investigations do
resources :clues
end
控制器的上下文中,处理线索也应该有自己的资源。否则事情会变得复杂。如果线索是特定于调查的,那么您可以将它们放在调查URL下。
/investigations/1/clues/1
这会给你类似create.js.erb
的东西,但这可能没有必要,除非有必要,否则我会避免嵌套。
然后,控制器可以以正确的格式进行响应。在这种情况下,Rails UJS为您提供所需的工具。您可以呈现destroy.js.erb
或x
模板来处理用户操作。模板将具有所需的JavaScript和动态代码来更新屏幕状态。
答案 1 :(得分:0)
如果可能的话,尝试使用Rails' RESTful路线。在这种情况下,这可能意味着您的路线文件中的行看起来像:
resources users do
resources clues
end
在您的users / clues_controller.rb文件中,为不同的AJAX请求添加操作,例如create
向用户添加线索(通过POST请求),destroy
操作以删除来自用户的线索(通过DELETE请求,可能需要使用POST +" _method = delete"参数进行模拟)。