リリースに関連付けられたトラックを保存するために、リリースモデルに次のコードがあります。現在の状態では、トラックはランダムな順序でDBに保存されます。SQLステートメントが設定された順序と原因で実行されていないことを認識しています。
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_tracksdefを追加して、それらが正しい順序でDBに入るようにすることは可能ですか?順序を決定するために使用できる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を介してトラックを追加していますが、これは機能しなくなりました。
これらをどこに設定するかがわかれば、acts_as_listを介さずに、releases_tracksモデルの位置を手動で設定するのと同じようなものを書くことができると思います。