34 votes

Rails 3 fields_for - l'ordre de tri se perd

J'utilise Rails 3.0.3 avec ruby 1.9.2p0.

Dans mon profile_controller (fonction d'édition), j'ai cet appel

@profile = Profile.find(params[:id])
@profile_items = @profile.profile_items.order("pos")

pour obtenir les éléments @profile_items dans le bon ordre, triés sur "pos". Dans le fichier _form.html.erb, j'ai ce qui suit

<% @profile_items.each do |pi| %>
  <%= pi.pos %> | 
<% end %>
<%= f.fields_for :profile_items do |f2| %>
  <%= render 'profile_item_fields', :f => f2 %>
<% end %>

Les trois premières lignes sont du code de test pour montrer que les éléments @profile_items sont dans le bon ordre. Mais lorsqu'ils sont rendus, ils ont perdu l'ordre trié !

J'ai beaucoup cherché la réponse et je pense qu'il s'agit d'un "piège" courant dans lequel on tombe. tomber.

Merci pour toute aide...

58voto

Terrell Miller Points 513

Selon la documentation Rails pour champs_pour Vous pouvez également spécifier l'objet de l'enregistrement après le nom de l'enregistrement.

Cela devrait donc fonctionner...

<%= f.fields_for :profile_items, @profile_items do |f2| %>
  <%= render 'profile_item_fields', :f => f2 %>
<% end %>

25voto

Ben Points 656

Ceci peut être réalisé avec un default_scope sur le modèle imbriqué :

class YourModel < ActiveRecord::Base
  belongs_to :other_model
  default_scope { order(:name) }
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X