他の人が示唆したように、同期呼び出しにしたい場合は、コントローラー アクションに追加するだけです。1 つだけ質問があります。トラック モデルで位置属性を明示的に要求するという要件はありますか。デフォルトでは、プレイリストに追加するトラックは最後に追加されるため
playlist = Playlist.find params[:id]
playlist.transaction.do
playlist.tracks.create(params[:track])
end
したがって、最後に追加したトラックが必要な場合は、次のようにして取得できます
playlist.tracks.last
トラックに何らかの順序付けが必要な場合は、Track モデルに何らかのスコープ メソッドを追加して、トラックを「新しいものから古いものへ」または「古いものから新しいものへ」(位置属性のない例) にレンダリングできます。
scope: sort_by_newest, order('created_at desc')
scope: sort_by_oldest, order('created_at asc')
position 属性を使用した明示的なトラッキングが引き続き必要な場合は、
playlist = Playlist.find params[:id]
track_params = params[:track] || {}
track_params.merge!({position: playlist.tracks.count('id') + 1})
playlist.transaction.do
playlist.tracks.create(track_params)
end
トラックに何らかの順序付けが必要な場合は、Track モデルに何らかのスコープ メソッドを追加して、トラックを「新しい順」または「最も古い順」(position 属性の例) でレンダリングできます。
scope: sort_by_newest, order('position desc')
scope: sort_by_oldest, order('position asc')
それが役に立てば幸い。