rails3:fields用于验证失败后的排序



在我的控制器创建方法中,我正在创建一个父&使用accepts_nested_attributes的子(ren)对象。这一切都很好。

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

但是,当验证失败时(例如,对于丢失的属性),当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 %>

任何指针都很棒。。

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

试试这个:

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

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

我真的不确定,但试试:

在控制器中

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

在视图中

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

相关内容

  • 没有找到相关文章

最新更新