【发布时间】:2014-02-20 20:28:49
【问题描述】:
我有一个 Rails 多态模型“任务”。将有许多不同的模型具有“任务”。现在我有一个模型“患者”,对于每个患者,我需要提取分配给他们的任务,将它们放在每个患者索引页面上,然后使用 angular 处理该页面内任务的粗略操作。这就是我一直在经历的内部斗争。我可以看到两种截然不同的方法,但我不确定哪种方法会被认为是最佳设计实践:
会有许多具有任务的 rails 对象,因此任务应将所有逻辑保留给自己,并破译什么对象正在请求任务。将有一个角度的 TasksController 将通过您所在的页面知道您正在处理的“可任务”对象是什么。然后它将查询 tasks_controller 以提取与该任务对象相关的所有任务。对于每个 crud 操作,任务对象和资源将处理数据。
每个对象(在这种情况下是每个患者)通过关联 (patient.tasks) 知道它有哪些任务,因此逻辑应该流经任何可任务对象。在 Angular 中会有一个 PatientController 会找到当前的患者,然后在 rails 中查询 patients_controller,并返回分配给该患者的相关任务。对于每个 crud 操作,患者对象和资源将处理数据。
现在我选择了选项 1。这是我的 TasksController.js:
BC.controller('TasksController', ['$scope', 'TaskResource', function($scope, TaskResource){
$scope.init = function(taskableId, taskableType, currentUserId) {
$scope.task = {};
$scope.task.taskableId = taskableId;
$scope.task.taskableType = taskableType;
$scope.task.creatorId = currentUserId;
TaskResource.query({taskable_id: $scope.task.taskableId, taskable_type: $scope.task.taskableType}).then(function(result){
$scope.tasks = result.reverse();
});
};
$scope.taskCreate = function($event, task){
$event.preventDefault();
new TaskResource({text: task.text, taskableType: task.taskableType, taskableId: task.taskableId, creatorId: task.creatorId})
.create().then(function(result){
$scope.tasks.unshift(result);
$scope.task.text = '';
});
};
}]);
我有一个 init 函数,我在其中传入我所在页面的 taskable_id 和 taskable_type,以便从 tasks_controller 和 Task 模型中查询正确的任务。这目前正在工作,但我开始看到一些可能的设计问题,并且不禁觉得这可能是一个糟糕的设计实践。对此的任何帮助/想法将不胜感激。谢谢。
【问题讨论】:
标签: ruby-on-rails angularjs design-patterns