1

在我的控制器创建方法中,我使用accept_nested_attributes 创建一个父对象和子对象。这一切都很好。

孩子有一个正确设置的排序属性。

但是,当验证失败时(例如缺少属性),当 fields_for 方法运行时,不会保留子对象的顺序。

我试过使用 parent.children.reorder("ordering 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 %>

任何指针都会很棒..

4

2 回答 2

5

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

试试这个:

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

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

于 2012-01-07T20:32:24.577 回答
0

我真的不确定,但试试:

在控制器中

@children = @parent.children.reorder("ordering ASC")

在视图中

<%= f.fields_for :children, @children do |ff| %>
    <%= render "child_fields", :ff => ff %>
<% end %>
于 2012-01-07T20:17:32.480 回答