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
的一些变体。