私は、has_manyTodoListsを持つプロジェクトのネストされたフォームにRails3、simple_form、およびcocoonを使用しています。simple_fields_for呼び出しに、ソフト削除されていないTodoListのみを含めたいので、名前付きスコープ「nondeleted」を使用したいと思います。
私のプロジェクトフォームには次のものがあります。
<%= f.simple_fields_for :todo_lists, f.object.todo_lists.nondeleted do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
これは、編集ビューの最初のロードでは正常に機能します(つまり、削除されたTodoListは表示されません)が、検証に失敗したフォームを送信すると、新しく追加されたTodoListはすべて失われます。
名前付きスコープを削除すると、検証に失敗しても新しく追加されたTodoListは失われませんが、すべてのTodoList(削除されたものを含む)が表示されます。
私も次のことを試しました:
<% @project.todo_lists.each do |todo_list| %>
<% if !todo_list.deleted && !todo_list.name.blank? %>
<%= f.simple_fields_for :todo_lists, todo_list do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
<% end %>
<% end %>
これは両方の問題を解決しますが、TodoListを適切な順序に保つ機能など、必要な柔軟性が得られません。
コレクションをsimple_fields_for(私が理解している限り、Railsのfields_forと同じ関連動作)に渡す方法はありますか?これにより、失敗した検証で新しく追加されたフィールドを削除せずに、名前付きスコープと並べ替えを使用できますか?