正如其他人所建议的那样,如果您希望它是一个同步调用,只需将其添加到您的控制器操作中。只是有一个问题,是否要求您在 Track 模型中明确要求位置属性。因为默认情况下,您添加到播放列表的曲目会添加到末尾
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 模型添加一些范围方法,以“按最新到最旧”或“按最旧到最新”呈现曲目(具有位置属性的示例)。
scope: sort_by_newest, order('position desc')
scope: sort_by_oldest, order('position asc')
希望能帮助到你。