0

リリースに関連付けられたトラックを保存するために、リリースモデルに次のコードがあります。現在の状態では、トラックはランダムな順序で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モデルの位置を手動で設定するのと同じようなものを書くことができると思います。

4

1 に答える 1

0

これらのトラックを特定の順序で選択する必要があると思います。:order次に、関連付けで param を定義できます。次に例を示します。

class Album < ActiveRecord::Base
  has_many :tracks, :order => "track_number asc"
end
于 2012-05-03T09:51:03.293 に答える