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_date
とend.date
セクションの作業動作させることができなかったので、これの目的は、DataTableのためのシンプルなクエリである - 私は収容するために、クライアント自体の中にフィールドを作ってきたが'最も早い'と '最新の'タスクの日付が表示されますが、現在は常にNilが表示されます。
私はそれなしで ArgumentError: comparison of ActiveSupport::TimeWithZone with nil failed
応答を得ていたので、私はif/else
ラッパーを使用。
この機能が終了する前にbyebugが終了すると、client
、project
、task
がすべて適切なデータを表示し、クライアントに必要な日付が表示されます。しかし、Rails Consoleやアプリケーション自体を使ってレコードを保存すると、クライアントは決して更新されません。
これは簡単な問題だと思われますが、どのステップで問題が更新されているか把握する方法がわかりません。私はConsoleを使って手動で同じクエリを実行しようとしましたが、十分にうまく動作します。
これは、アプリケーションを動作させるのに十分です。 Project.saveを呼び出す必要がない理由がありますか? – DNorthrup
コードを見ずに確信が持てません。しかし、あなたが '#save'を呼び出さなかった場合、またはメソッドが'#before_save'コールバックで呼び出された場合、あなたは '#update'のバリエーションを使用したと仮定します。 – EJ2015