Ruby on rails Rails-保存时更新父关系

Ruby on rails Rails-保存时更新父关系,ruby-on-rails,Ruby On Rails,我有两个在3个模型上有许多关系。 客户有很多项目 这个项目有很多任务 客户通过项目完成了许多任务 我想做的是找到客户任务的“最近”开始日期和“最近”结束日期 我有一些类似的工作来更新项目,当先前/之后的任务被保存时,但是我似乎在更新客户端时遇到了问题 这样做的目的是更简单地查询数据表,因为我无法让筛选器在Client.project.tasks.start\u date上工作 def update_project_record client = Client.find(project.c

我有两个
在3个模型上有许多
关系。
客户有很多项目
这个项目有很多任务
客户通过项目完成了许多任务

我想做的是找到客户任务的“最近”开始日期和“最近”结束日期

我有一些类似的工作来更新
项目
,当先前/之后的
任务
被保存时,但是我似乎在更新
客户端
时遇到了问题

这样做的目的是更简单地查询数据表,因为我无法让筛选器在
Client.project.tasks.start\u date上工作

def update_project_record
    client = Client.find(project.client_id)
    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
    if client.nearest_project_start.present?
        client.nearest_project_start = self.task_start_date if self.task_start_date < client.nearest_project_start
    else
        client.nearest_project_start = self.task_start_date
    end
    if client.furthest_project_end.present?
        client.furthest_project_end = self.task_end_date if self.task_end_date > client.furthest_project_end
    else
        client.furthest_project_end = self.task_end_date
    end
end
def更新项目记录
client=client.find(project.client\u id)
如果self.task\u start\u日期project.end\u date,则project.end\u date=self.task\u end\u date
如果client.nearest\u project\u start.present存在?
如果self.task\u start\u dateclient.furthest\u project\u end=self.task\u end\u date,则client.furthest\u project\u end=self.task\u date
其他的
client.furthest\u project\u end=self.task\u end\u date
结束
结束
项目开始日期
结束日期
部分工作-我在客户内部创建了一个字段,用于存放“最早”和“最晚”的任务日期,但它当前总是打印出零

我使用了
if/else
包装器,因为我得到了一个
ArgumentError:将ActiveSupport::TimeWithZone与nil进行比较失败
没有它的回应

奇怪的是,如果我在函数结束之前通过ebug,
客户端
项目
,和
任务
都显示了正确的数据,客户端显示了应该显示的日期。但如果我使用Rails控制台或应用程序本身来保存记录,则客户端永远不会得到更新


这似乎是一个简单的问题,但我不确定如何找出它在哪一步更新有问题。我已经尝试使用Console手动执行相同的查询,并且确信它工作得非常好。

您需要调用
客户端。在方法结束时保存

果然,这使应用程序工作正常。我不需要调用Project.save以使其部分正常工作,有什么具体原因吗?如果没有看到代码,我无法确定。但是如果您没有调用
#save
,或者在
#save
回调之前调用了该方法,那么我假设您使用了
#update
的一些变体。