0

我正在 Ruby on Rails (3.0) 中构建项目管理应用程序。我试图弄清楚如何在更新项目列时更新项目的所有任务。这是情况。

正如预期的那样,我在 /projects/index.html.erb 中列出了所有项目。我正在使用可排序列表(来自 Ryan Bates 教程)在用户对列表进行排序时更新 project.position 字段。

当项目列表被排序时,project.position列在每次排序时都会更新,我还想更新该belong_to项目的所有任务的 task.project_position 列。所以task.project_position = project.position。

我猜这是通过项目模型中的 after_save 完成的,但我可能完全错了。

4

1 回答 1

1

不要多次存储该值 -除了少数深奥的情况外,这是所有情况redundantunnecessary

在 Ruby/Rails 中,您可以delegate像这样(在您的 Task 模型中)从任务到项目的位置方法:

delegate :position, :to => :project, :prefix => true, :allow_nil => true

有了它,您现在可以task.project_position通过两者之间的关联返回 project.position 的值,而不会在项目中的所有任务中重复该数据元素。

所有这些都假设了该任务belongs_to :project(可能还有 project has_many :tasks)。

更详细的解释。

如果您觉得出于某种原因确实必须走非规范化路线,那么是的,after_save 将是这样做的地方。

于 2011-08-02T21:02:40.963 回答