33

我正在使用带有 ruby​​ 1.9.2p0 的 Rails 3.0.3。

在我的profiles_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 的顺序正确。但是当它们被渲染时,它们已经失去了排序顺序!

现在我已经搜索了很多答案,我认为这一定是一个常见的“陷阱”。

感谢您的帮助...

4

2 回答 2

54

根据fields_for的 Rails 文档,您还可以在记录名称之后指定记录对象。

所以这样的事情应该工作......

<%= f.fields_for :profile_items, @profile_items do |f2| %>
  <%= render 'profile_item_fields', :f => f2 %>
<% end %>
于 2012-05-20T21:54:32.297 回答
25

这可以通过嵌套模型上的 default_scope 来完成:

class YourModel < ActiveRecord::Base
  belongs_to :other_model
  default_scope { order(:name) }
end
于 2013-04-24T23:09:52.047 回答