Rails 3 fields_for - порядок сортировки теряется - PullRequest
30 голосов
/ 10 февраля 2011

Я использую 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 в правильном порядке.Но когда они отрендерены, они потеряли отсортированный порядок!

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

Благодарю за любую помощь ...

Ответы [ 2 ]

46 голосов
/ 21 мая 2012

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

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

<%= f.fields_for :profile_items, @profile_items do |f2| %>
  <%= render 'profile_item_fields', :f => f2 %>
<% end %>
20 голосов
/ 25 апреля 2013

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

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