рельсы 3: поля_ для упорядочения после сбоя проверки - PullRequest
1 голос
/ 08 января 2012

В моем методе создания контроллеров я создаю родительские и дочерние (ren) объекты, используя accepts_nested_attributes. Это все отлично работает.

У детей есть атрибут порядка, который установлен правильно.

Однако, когда проверка завершается неудачно (например, для отсутствующего атрибута), порядок дочерних объектов не сохраняется при запуске метода 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 %>

Любые указатели были бы великолепны ..

Ответы [ 2 ]

5 голосов
/ 08 января 2012

Я предполагаю, что в вашей форме задано значение ordering, и проблема в том, что он не вступает в силу при сбое сохранения. Причина этого заключается в том, что при сортировке по ordering ASC используется база данных, а поскольку она не сохраняется, она не сортируется.

Попробуйте вместо этого:

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

При этом будет использоваться ordering, хранящийся в памяти, что должно быть тем, что было ранее отправлено формой.

0 голосов
/ 08 января 2012

Я действительно не уверен, но попробуйте:

В контроллере

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

В поле зрения

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