次の has_many 関係を持つ目標カレンダーを作成しています。
CalEntry
has_many :goals
Goals
has_many :completed_goals
has_many :planned_goals
CompletedGoals
has_many :completed_times
PlannedGoals
has_many :planned_times
ご覧のとおり、各暦日には多くの目標が含まれており、それらは完了した目標と計画された目標に分類されます。これらのそれぞれには、そのアクティビティに費やされた時間チャンクの量に対応する時間があります。コントローラーで編集アクションを使用すると、問題が発生します。編集中の CalEntry オブジェクトの下の特定の目標に時間が記録されていない場合、編集中の CalEntry のいくつかの時間チャンクを作成できるようにしたいと考えています。これは私が持っているものです:
def edit
@cal_entry = CalEntry.find(params[:id])
@goal_id = params[:goal_ref]
goal = @cal_entry.goal.find(@goal_id)
completed_goal = goal.completed_goals.first
completed_goal.completed_times.build
end
@cal_entry オブジェクトには、completed_times の新しく構築されたインスタンスが含まれていないように見えるため、これは機能していないようです。@cal_entry オブジェクトで使用されている find メソッドを .build に置き換えると、ネストされたオブジェクトのツリー全体のまったく新しいインスタンスが構築されますが、これは私が望んでいるものではありません。私は、completed_times がいくつかの追加のインスタンスを構築することだけを望んでいます。深くネストされたオブジェクトに対してコントローラー内で新しいインスタンスを構築する方法について、私が見逃している単純なものがあるに違いありません。
助けてくれてありがとう!
エム