1

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 メソッドの書き方を知っている人はいますか?

4

1 に答える 1

1

一般に、SQL クエリが実行される順序はランダムです。これは、一括挿入と選択の両方に適用できます。レコードを特定の順序で並べる必要がある場合は、ORDER BY 句を使用する必要があります。レコードの保存方法によっては、ID で並べ替えることができる場合があります。それ以外の場合は、各アイテムのリスト位置を表すフィールドを追加することを検討してください。

于 2012-05-02T14:58:13.893 に答える