2011-08-02 161 views
0

我在Ruby on Rails(3.0)中构建项目管理应用程序。我想弄清楚如何更新项目列的更新项目的所有任务。这是情况。使用after_save更新所有belongs_to记录

我按照预期在/projects/index.html.erb中列出了所有项目。我使用可排序的列表(from Ryan Bates tutorial)在用户对列表进行排序时更新project.position字段。

当项目列表得到排序时,project.position列在每种排序上得到更新,我还想更新项目belong_to所有任务的task.project_position列。所以task.project_position = project.position。

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

回答

1

不要多次存储该值 - 这是除了一些深奥情况下的所有redundantunnecessary

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

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

有了到位,你现在有task.project_position这将返回通过两者之间的关联来确定project.position的值,而不会在项目中的所有任务上重复该数据元素。

所有这些假定任务belongs_to :project(也可能是项目has_many :tasks)。

more detailed explanation.

如果你觉得你真的必须走非归一化的路线出于某种原因,那么,after_save的是做它的地方。