Rails 5 - 根据模型B的新日期时间更新模型A的日期时间

时间:2017-08-23 05:53:06

标签: ruby-on-rails

我有一个Project和一个Task型号。

项目有start_dateend_date 任务有task_start_datetask_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进行更改。我应该如何修改它?

1 个答案:

答案 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