2017-03-04 83 views
0

随着我目前的项目,我遇到了一种情况,并试图找出最佳实践。单个AJAX动作多个视图导轨最佳实践

假设有一个仪表板视图和一个任务视图。所有任务CRUD操作都可以在任一视图中完成。

用于显示表单的容器和用于列出任务的容器在每个视图上具有不同的名称。

我发现3个解决方案,但我不知道这是最好的做法:

  1. 一个视图不同的途径:即new_task_dashboard_ iew_path - 不是很宁静,但new.js和new_dashboard_view.js针对HTML分离操纵

  2. 将一个param [:view]传递给AJAX请求,然后在new.js中添加一个if语句以指示要更新哪个容器,即。 (如果params [:view] =='dashboard'种语句)

  3. 只留下new.js - DOM上不存在的容器不会更新 - 只有存在的容器会更新

所有3个工作,但作为一个新的铁轨用户,我试图找出最合适的方法是什么。或者也许有一种我不知道的更好的做法?

+0

不知道这应该是“回答”还是只是评论,因为它对你的设计方法是主观的......但是,经验告诉我(痛苦的是)有单独的控制器(#1)和然后利用控制器问题/修改您的js/partials /共享视图以保持干爽。我发现试图简化到不同概念的共享控制器的程度会导致你在添加更多行为/理解你的代码时更加痛苦。 – dstull

+0

谢谢,这是有道理的。我大部分时间都在尝试#2,当我回去改变视图时,我一直在挣扎。听起来好像没有明显的“Rails方式”,但有些方法可能不那么痛苦! –

回答

0

只是为了跟进我以为我会发布方向我决定去帮助任何其他新的铁轨用户。

要跟随dstull的评论,我发现传递一个额外的参数,如视图最初工作,但后来造成了很大的问题。与其他选项相比,基于额外参数运行大量条件的资源密集型。

在这种情况下,命名空间似乎最适合设计。例如:

#config/routes.rb 
namespace :dashboard_view do 
    resources :tasks 
end 

namespace :task_view do 
    resources :tasks 
end 

然后,我对每个视图都有单独的controllers/views/javascript。例如:

#views/dashboard_view/tasks/new.js 
$('#dashboard-task-form-container).html('<%= j render "form" %>'); 

#views/task_view/tasks/new.js 
$('#task-form-container).html('<%= j render "form" %>'); 

#controllers/dashboard_view/tasks_controller.rb 
class DashboardView::TasksController < ApplicationController 
    ... 

#controllers/task_view/tasks_controller.rb 
class TaskView::TasksController < ApplicationController 
    ... 

尽管回想起来作为一个新的Rails开发者我有一个很难搞清楚构建的东西明显。

希望这可以帮助别人!