2012-01-07 1 views
1

В моем контроллере создать метод Я создаю родительский объект & с помощью accepts_nested_attributes. Все работает отлично.rails 3: fields_for ordering после подтверждения не удалось

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

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

Пробовал, что он убивает все дочерние объекты (т. Е. Ничего не отображается в форме). –

 Смежные вопросы

  • Нет связанных вопросов^_^