我有一个Project
和一个Task
型号。
项目有start_date
和end_date
任务有task_start_date
和task_end_date
。
如何让它执行Project start_date' is the earliest
task_start_date and the same for
end_date`?
任务是项目的子项(如果重要)。
我已经做了一些searching,我相信一个' Before Save'是我想要的,但我不确定如何实现这一点。
我已经尝试了
dev update_project_record
self.project.start_date = self.task_start_date if self.task_start_date < self.project.start_date
end
如果我要在Rails控制台中进行更改,它似乎正在工作,但如果我使用应用程序本身,它实际上并没有对Project
进行更改。我应该如何修改它?
答案 0 :(得分:0)
使用byebug我能够找出关联问题。
int
使用一些轻量级控制台游戏让我意识到此调用已经定义了[12, 21] in /home/ubuntu/workspace/sow_trip/app/models/task.rb
13:
14: private
15:
16: def update_project_record
17: byebug
18: #self.project.start_date = self.task_start_date if self.task_start_date < thisProject.project.start_date
19: #self.project.end_date = self.task_end_date if self.task_end_date > self.project.end_date
=> 20: end
21: end
(byebug) self
#<Task id: 31, task_name: "Fail Me Boo", comment: nil, task_start_date: "2016-05-05 00:00:00", task_end_date: "2020-02-20 00:00:00", project_id: 1, created_at: "2017-08-23 06:10:31", updated_at: "2017-08-23 06:10:31", product: "D", document_id: 1>
(byebug) project
#<Project id: 1, name: "Demo Test", project_type: "Misc", cost: "7500", start_date: "2017-05-01 00:00:00", end_date: "2017-07-28 00:00:00", created_at: "2017-08-23 02:39:44", updated_at: "2017-08-23 06:10:10", client_id: 1>
(byebug) task
,因此我不需要搜索project
的实例。
self
我的最终代码是否适合任何人 - 因为我找不到类似的情况。
我使用def update_project_record
project.start_date = self.task_start_date if self.task_start_date < project.start_date
project.end_date = self.task_end_date if self.task_end_date > project.end_date
end
自动更新belongs_to :project, touch: true
字段,但我有一个自定义日期时间,即项目&#39;应该尽可能早 - updated_at
和最新可能 - state_date