33

Ruby 1.9.2p0 で Rails 3.0.3 を使用しています。

私のprofiles_controller(編集機能)には、この呼び出しがあります

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

「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 が正しい順序であることを示すテスト コードです。しかし、それらがレンダリングされると、ソートされた順序が失われます!

今、私は答えをたくさん探しましたが、これはよくある「罠」に陥るに違いないと思います。

助けてくれてありがとう...

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 に答える