ネストされたフォームを使用する Rails アプリケーションがあります。詳細は次のとおりです。この解決策を試しました ( Rails 3 Nested Models unknown attribute Error )が、何らかの理由で、オプションを正しく一覧表示して保存する代わりに、フィールドが複数回繰り返されます。よろしくお願いします。
Newsavedmaps のモデル情報
has_many :waypoints, :dependent => :destroy
accepts_nested_attributes_for :waypoints
Newsavedmap_controller
def new
@newsavedmap = Newsavedmap.new
waypoint = @newsavedmap.waypoints.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @newsavedmap }
end
end
def edit
@newsavedmap = Newsavedmap.find(params[:id])
if @newsavedmap.itinerary.user_id == current_user.id
respond_to do |format|
format.html # edit.html.erb
format.xml { render :xml => @activity }
end
else
redirect_to '/'
end
end
マップリー ビュー
<% form_for @newsavedmap, :html=>{:id=>'createaMap'} do |f| %>
<%= f.error_messages %>
<% f.fields_for :waypoint do |w| %>
<%= w.select :waypointaddress, options_for_select(Waypoint.find(:all, :conditions => {:newsavedmap_id => params[:newsavedmap_id]}).collect {|wp| [wp.waypointaddress, wp.waypointaddress] }), {:include_blank => true}, {:multiple => true, :class => "mobile-waypoints-remove", :id =>"waypoints"} %>
<% end %>
<% end %>
上記のコードを使用すると、フォームは正しく機能しますが、送信すると次のエラーが発生します。
UnknownAttributeError (unknown attribute: waypoint)
":waypoint do |w|" を変更すると 「:waypoints do |w|」へ ビューでは、ユーザーが新しいレコードを作成しているときに選択フィールドが消え、編集ビューでは、選択フィールドが数回表示されます (ユーザーがレコードに保存したウェイポイントの数に関係なく)。
このフォーム フィールドを正しく機能させるにはどうすればよいですか?
編集1
これが私の最新の試みです。新しいレコードの場合、選択フィールドは表示されません。ただし、編集ビューでは、選択フィールドが複数回表示されます。これは Rails 2 アプリケーションです。参考までに。コメントからヒントを得て、collection_select アプローチを使用しました (そのためのドキュメントが見つからなかったため、collection_for_select ではありません)。
<% f.fields_for :waypoints do |w| %>
<%= w.collection_select( :waypointaddress, @newsavedmap.waypoints, :waypointaddress, :waypointaddress, {:include_blank => true}, {:id =>"waypoints"} ) %>
<% end %>