2012-01-07 12 views
1

私のコントローラでは、メソッドを作成します。accepts_nested_attributesを使用して親の&子オブジェクトを作成しています。それはすべて正常に動作します。rails 3:バリデーションが失敗した後の注文のフィールド

子供には正しく設定された注文属性があります。

ただし、検証に失敗すると(属性の欠落など)、fields_forメソッドを実行すると、子オブジェクトの順序はでなく、になります。

それは、物事をより明確にする必要があり、私は任意のコードを投稿して幸せ...

を私はparent.children.reorder(「注文ASC」)を使用して試してみましたが、それは動作しません!

def create 
    @parent = Parent.new(params[:parent]) 

    respond_to do |format| 
    if @parent.save 
     format.html 
    else 
     @parent.children.reorder("ordering ASC") #this makes no difference 
     format.html { render :action => "new" } 
    end 
    end 
end 

と部分

<%= f.fields_for :children do |ff| %> 
    <%= render "child_fields", :ff => ff %> 
<% end %> 

形で任意のポインタは素晴らしいことだ。..

答えて

5

私はorderingがフォームに設定されている、との問題は、保存が失敗したときに、それが効果を取っていないことであることを前提としています。その理由は、ordering ASCでソートするとデータベースが使用され、保存されないためソートされないためです。

は、代わりにこれを試してみてください:

<%= f.fields_for :children, @parent.children.sort_by(&:ordering) do |ff| %> 

これは、以前の形式で提出されたものである必要があり、メモリに保存されているorderingを、使用します。

+0

パーフェクト。私は数時間前に尋ねていたはずです); ..おかげさまでヒープ –

0

私は本当にわからないんだけど、試してみてください。

をコントローラに

@children = @parent.children.reorder("ordering ASC") 
ビューで

<%= f.fields_for :children, @children do |ff| %> 
    <%= render "child_fields", :ff => ff %> 
<% end %> 
+0

これは、すべての子オブジェクトを強制終了するように試みました(つまり、フォームには何も描画されません)。 –

関連する問題