我正在使用Rails 3.0.3和ruby 1.9.2p0。
在我的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的顺序正确。 但是当它们被渲染时,它们已经丢失了排序顺序!
现在我已经搜索了很多答案,我认为这必须是一个常见的“陷阱” 掉进。
感谢任何帮助...
答案 0 :(得分:46)
根据fields_for的Rails文档,您还可以在记录名称后指定记录对象。
所以这样的事情应该有用......
<%= f.fields_for :profile_items, @profile_items do |f2| %>
<%= render 'profile_item_fields', :f => f2 %>
<% end %>
答案 1 :(得分:20)
这可以通过嵌套模型上的default_scope来完成:
class YourModel < ActiveRecord::Base
belongs_to :other_model
default_scope { order(:name) }
end