Estoy usando Rails 3.0.3 con ruby 1.9.2p0.Rails 3 fields_for - el orden de clasificación se pierde
En mi profiles_controller (función de edición) Tengo esta llamada
@profile = Profile.find(params[:id])
@profile_items = @profile.profile_items.order("pos")
para obtener los @profile_items en el orden correcto, ordenados en "POS". En el _form.html.erb I tienen las siguientes
<% @profile_items.each do |pi| %>
<%= pi.pos %> |
<% end %>
<%= f.fields_for :profile_items do |f2| %>
<%= render 'profile_item_fields', :f => f2 %>
<% end %>
las 3 primeras líneas son código de prueba para mostrar que los @profile_items están en el orden correcto. ¡Pero cuando se procesan, pierden el orden ordenado!
Ahora tengo que buscar mucho por una respuesta y creo que esto debe ser una "trampa" común para caer en.
agradecido por cualquier ayuda ...
pequeña modificación. Si desea mantener los registros ordenados, no lo haga en la asociación. Traerá cosas de la base de datos y eliminará sus entradas temporales (como las que tienen errores que no se guardaron). Entonces, en lugar de '@ profile_items.order ('position')' haz algo como esto: '@ profile_items.sort_by (&: position)'. – Grocery
Mucho, mucho, mucho, mucho, mucho mejor que usar un alcance predeterminado. –
... estoy de acuerdo con Grocery en el problema, pero los campos-for están implícitos en base a "acepta atributos anidados para", por lo que no hay @profile_items (utilizando este ejemplo) alguna vez definidos. Entonces, ¿cómo ordenar la colección generada implícitamente? Encontré esa respuesta aquí: https://stackoverflow.com/questions/10505853/how-to-maintain-the-ordering-for-nested-attributes-when-using-accepts-nested-att – JosephK