2017-08-23 4 views
0

私はProjectTaskというモデルを持っています。Rails 5 - モデルBの新しい日付に基づくモデルAの日時を更新する

プロジェクトはstart_dateend_date タスクtask_start_datetask_end_dateを持っています。

どうすればいいですか?プロジェクトのstart_date' is the earliest task_start_date and the same for end_date`?

タスクはProjectの子です(問題の場合)。

searchingを実行しました。私は「保存前」と思っていますが、これを同様に実装する方法がわかりません。

私は

dev update_project_record 
     self.project.start_date = self.task_start_date if self.task_start_date < self.project.start_date 
    end 

を試みたと私はRailsのコンソール内の変更を行うことになっている場合はそれが動作しているようだが、私は、アプリ自体を使用している場合、それは実際に変更を加えていません Project。どのように修正する必要がありますか?

答えて

0

byebugを使用して、私は関連の問題を理解することができました。いくつかの光のコンソールプレイを使用して

[12, 21] in /home/ubuntu/workspace/sow_trip/app/models/task.rb 
    13:  
    14:  private 
    15:  
    16:  def update_project_record 
    17:   byebug 
    18:   #self.project.start_date = self.task_start_date if self.task_start_date < thisProject.project.start_date 
    19:   #self.project.end_date = self.task_end_date if self.task_end_date > self.project.end_date 
=> 20:  end 
    21: end 
(byebug) self 
#<Task id: 31, task_name: "Fail Me Boo", comment: nil, task_start_date: "2016-05-05 00:00:00", task_end_date: "2020-02-20 00:00:00", project_id: 1, created_at: "2017-08-23 06:10:31", updated_at: "2017-08-23 06:10:31", product: "D", document_id: 1> 
(byebug) project 
#<Project id: 1, name: "Demo Test", project_type: "Misc", cost: "7500", start_date: "2017-05-01 00:00:00", end_date: "2017-07-28 00:00:00", created_at: "2017-08-23 02:39:44", updated_at: "2017-08-23 06:10:10", client_id: 1> 
(byebug) task 

projectがすでにこのコール内で定義されて実現するために私を導いたので、私はselfのインスタンスを検索する必要はありません。

def update_project_record 
    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 
end 

同様の状況が見つからないため、私の最終的なコードは誰でも見ていますか?

私は自動的にupdated_atフィールドを更新するためにbelongs_to :project, touch: trueを使用しますが、私は「プロジェクト」はend-date

state_date possible-、最初と最後の-possible-を持っている必要があり、カスタム日時を持っています
関連する問題