Ryan Bate's nested model form tutorialを使用してリリース用のトラックを作成しました(チュートリアルではアンケートのための質問です)。Railsのネストされたモデルフォームが子オブジェクトのランダムな順序を示しています
これは、トラックがDBに追加される順序が見た目にランダムではなく、私が必要とする形で入力されていることに気が付くまでうまくいきます。
トラックがリリースモデルに以下の定義を使用して構築されています:
def track_attributes=(track_attributes)
track_attributes.each do |attributes|
tracks.build(attributes)
end
end
次にリリース_formに部分的に私が持っている:
部分_track_fieldsに引っ張る<%= f.fields_for :tracks do |builder| %>
<%= render 'track_fields', :f => builder %>
<% end %>
、含む:
を<%= f.text_field :name, :class => "text" %>
<%= f.text_field :isrc, :class => "text" %>
<%= f.check_box :_destroy %>
etc
トラックの配列が、 eは入力しましたか?
私はacts_as_listをreleases_tracksに使用しています。これはうまく動作するスルーモデルですが、トラックテーブルに誤って追加されたものから順番をとります。
EDIT:
に思える私のトラックが一緒に保存されています:
accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true
ない、私が考えていたようデフtrack_attributes =(track_attributes)を介して。
私は今フォームに追加した位置フィールドでトラックをソートするbefore_saveメソッドを書く方法を知っていますか?
ああ、私はこれが事実かもしれないと思った。トラックを保存していると思っていたtracks.build(属性)行をコメントアウトした後、トラックが現在どのように保存されているのか分かりません。 – Raoot
buildはActiveRecordオブジェクトを保存しません。単にそれをメモリに作成するだけです。 – Salil
ああ、私は参照してください。これを達成するために、私のリリースモデルに 'sort_tracks'定義とbefore_save呼び出しを追加できるかどうか、どんな考えですか? – Raoot