我在3个型号上有两个has_many
关系。
客户has_many项目
项目has_many任务
客户has_many任务通过项目
我要做的是找到“最近”的开始日期,以及客户端适用的任务的“最近结束日期”。
在保存早期/晚期Project
时,我有同样的工作来更新Task
,但我似乎在更新Client
方面遇到了问题。
这样做的目的是更简单地查询数据表,因为我无法使用过滤器来处理Client.project.tasks.start_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
project.start_date
和end.date
部分工作 - 我在客户端内创建了一个字段来容纳“最早”和“最新”的任务日期,但它目前始终打印出Nil。
我使用了if/else
包装器,因为我得到了一个
ArgumentError: comparison of ActiveSupport::TimeWithZone with nil failed
没有它的回应。
奇怪的是,如果我在该功能结束之前进行了操作,client
,project
和task
都会显示正确的数据,并且客户端会显示它应该的日期。但是,如果我使用Rails控制台或应用程序本身来保存记录,则客户端永远不会得到更新。
这似乎是一个简单的问题,但我不确定如何弄清楚它在更新问题的哪一步。我已经尝试使用Console手动执行相同的查询,并且确定它完全正常。
答案 0 :(得分:1)
您需要在方法结束时致电client.save
。