我的發佈模型中包含以下代碼以保存與發佈相關的曲目。在當前狀態下,曲目以隨機順序保存到數據庫。我知道SQL語句不是按照設定的順序執行的,也不是原因。我可以使用before_save對nested_attributes進行排序嗎?
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
def track_attributes=(track_attributes)
track_attributes.each do |attributes|
tracks.build(attributes)
artists_tracks.build(attributes)
end
end
是否可以使用before_save調用添加order_tracks def以確保它們以正確的順序進入數據庫?我有track_number字段可用於確定順序。
這樣的事情?
before_save :order tracks
def order_tracks
tracks.sort_by { |track| track.track_number }
end
(以上不工作)
編輯
我找到了一個相關的問題。我是通過軌道控制預先設定的標籤和用戶ID使用創建行動:
@track.user_id = current_user.id
@track.label_id = @release.label.id
現在,我通過這個accepts_nested_attributes不再有效增加軌道。
我在想如果我能弄清楚在哪裏設置這些,我可以寫一些類似的東西來手動設置我的releases_tracks模型中的位置,而不是通過acts_as_list。
應該是before_save:order_tracks,但是這可能是一個錯字不是你的問題。 –
是的,在這裏錯字....它在我的模型中是正確的,但仍然不起作用:( – Raoot