2017-09-12 14 views
0

3つのモデルに2つのhas_manyという関係があります。 クライアントhas_manyのは、私が何をしようとしているプロジェクトRails - 保存時に親関係を更新する

を通じて クライアントにhas_manyのタスク プロジェクトにhas_manyのタスクをプロジェクトの最寄の「開始日、およびクライアントが該当したタスクの「最寄りの終了日」を見つけることです。

Taskが保存されると、Projectを更新するために同様の機能がありますが、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セクションの作業動作させることができなかったので、これの目的は、DataTableのためのシンプルなクエリである - 私は収容するために、クライアント自体の中にフィールドを作ってきたが'最も早い'と '最新の'タスクの日付が表示されますが、現在は常にNilが表示されます。

私はそれなしで ArgumentError: comparison of ActiveSupport::TimeWithZone with nil failed 応答を得ていたので、私はif/elseラッパーを使用。

この機能が終了する前にbyebugが終了すると、clientprojecttaskがすべて適切なデータを表示し、クライアントに必要な日付が表示されます。しかし、Rails Consoleやアプリケーション自体を使ってレコードを保存すると、クライアントは決して更新されません。

これは簡単な問題だと思われますが、どのステップで問題が更新されているか把握する方法がわかりません。私はConsoleを使って手動で同じクエリを実行しようとしましたが、十分にうまく動作します。

答えて

1

方法の最後にclient.saveに電話する必要があります。

+0

これは、アプリケーションを動作させるのに十分です。 Project.saveを呼び出す必要がない理由がありますか? – DNorthrup

+1

コードを見ずに確信が持てません。しかし、あなたが '#save'を呼び出さなかった場合、またはメソッドが'#before_save'コールバックで呼び出された場合、あなたは '#update'のバリエーションを使用したと仮定します。 – EJ2015

関連する問題