Ryan Bate のネストされたモデル フォームのチュートリアルに従って、リリース用のトラックを作成しました (チュートリアルでは、アンケートの質問です)。
これは、トラックが DB に追加される順序が一見ランダムであることに気付くまで、非常にうまく機能します。
トラックは、リリース モデルで次の定義を使用して構築されます。
def track_attributes=(track_attributes)
track_attributes.each do |attributes|
tracks.build(attributes)
end
end
次に、 release _form パーシャルに次のように記述します。
<%= f.fields_for :tracks do |builder| %>
<%= render 'track_fields', :f => builder %>
<% end %>
これは、以下を含む _track_fields パーシャルを取り込みます。
<%= f.text_field :name, :class => "text" %>
<%= f.text_field :isrc, :class => "text" %>
<%= f.check_box :_destroy %>
etc
トラックの配列が入力された順序を失っている理由はありますか?
私はreleases_tracksでacts_as_listを使用していますが、正常に動作するスルーモデルがたくさんありますが、tracksテーブルに誤って追加されたものから注文を取ります。
編集:
私のトラックは次のように保存されているようです:
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
私が考えていたように、track_attributes =(track_attributes)定義を介していません。
フォームに追加した位置フィールドでトラックをソートする before_save メソッドの書き方を知っている人はいますか?