rails 3:在验证失败后的fields_for排序

pat*_*vey 1 ruby-on-rails nested-attributes fields-for

在我的控制器创建方法中,我使用accepts_nested_attributes创建父和子(ren)对象.一切正常.

子项具有正确设置的排序属性.

但是,当验证失败时(对于缺少的属性说),当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
Run Code Online (Sandbox Code Playgroud)

并以部分形式

<%= f.fields_for :children do |ff| %>
  <%= render "child_fields", :ff => ff %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

任何指针都会很棒..

Zub*_*bin 5

我假设ordering在你的表单中设置了,问题是当保存失败时它没有生效.原因似乎是通过ordering ASC使用数据库进行排序,并且因为它没有保存,所以它不会被排序.

试试这个:

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

这将使用ordering存储在内存中,该内存应该是以前由表单提交的内容.