Я использую Rails 3.0.3 с ruby 1.9.2p0.Rails 3 fields_for - порядок сортировки теряется
В моей profiles_controller (функция редактирования) У меня есть этот вызов
@profile = Profile.find(params[:id])
@profile_items = @profile.profile_items.order("pos")
, чтобы получить @profile_items в правильном порядке, отсортированные по «поз». В _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 находятся в правильном порядке. Но когда они оказываются, они потеряли отсортированный порядок!
Теперь у меня есть много для ответа, и я думаю, что это должна быть общая «ловушка» до .
Благодарен за любую помощь ...
Малые поправки. Если вы хотите сохранить сортировку записей, не делайте этого в ассоциации. Он будет извлекать материал из базы данных и удалять ваши временные записи (например, те, у которых ошибки не сохраняются). Поэтому вместо '@ profile_items.order ('position')' делаем что-то вроде этого: '@ profile_items.sort_by (&: position)'. – Grocery
Многое, много, много, много, намного лучше, чем использование области по умолчанию. –
... согласитесь с продуктом Grocery по проблеме, но поля-for неявны на основе «принимает вложенные атрибуты для» - поэтому не существует @profile_items (с использованием этого примера), когда-либо определенного. Итак, как сортировать неявно созданную коллекцию? Я нашел ответ здесь: https://stackoverflow.com/questions/10505853/how-to-maintain-the-ordering-for-nested-attributes-when-using-accepts-nested-att – JosephK