Rails - 保存

时间:2017-09-12 20:30:07

标签: ruby-on-rails

我在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_dateend.date部分工作 - 我在客户端内创建了一个字段来容纳“最早”和“最新”的任务日期,但它目前始终打印出Nil。

我使用了if/else包装器,因为我得到了一个 ArgumentError: comparison of ActiveSupport::TimeWithZone with nil failed 没有它的回应。

奇怪的是,如果我在该功能结束之前进行了操作,clientprojecttask都会显示正确的数据,并且客户端会显示它应该的日期。但是,如果我使用Rails控制台或应用程序本身来保存记录,则客户端永远不会得到更新。

这似乎是一个简单的问题,但我不确定如何弄清楚它在更新问题的哪一步。我已经尝试使用Console手动执行相同的查询,并且确定它完全正常。

1 个答案:

答案 0 :(得分:1)

您需要在方法结束时致电client.save