Подтвердить что ты не робот

Rails 3 fields_for - порядок сортировки теряется

Я использую Rails 3.0.3 с ruby ​​1.9.2p0.

В моих profile_controller (функция редактирования) у меня есть этот вызов

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

чтобы получить @profile_items в правильном порядке, отсортированный по "pos". В _form.html.erb у меня есть следующий

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

3 первые строки - это тестовый код, показывающий, что @profile_items находятся в правильном порядке. Но когда они оказываются, они потеряли упорядоченный порядок!

Теперь у меня есть много поисков ответа, и я думаю, что это должна быть обычная "ловушка" для впадать в.

Спасибо за любую помощь...

4b9b3361

Ответ 1

В соответствии с документацией Rails для fields_for вы также можете указать объект записи после имени записи.

Итак, что-то вроде этого должно работать...

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

Ответ 2

Это может быть выполнено с помощью default_scope для вложенной модели:

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