7

accepts_nested_attributes_forRailsアプリケーションで動的なマルチモデルフォームを実装しようとしています。私は2レベルの実装を示すEloyDuranの複雑なフォームの例に従っていますが、これを3レベルに拡張しようとしています。accepts_nested_attributes_for3レベルフォームのサポートはありますか?サンプルアプリを拡張する方法を教えてもらえますか?

第3レベルではJavaScriptが部分的に機能しています(何らかの理由で常に機能するとは限りません)が、第3レベルのオブジェクトを保存できません。各属性に渡されるパラメータ名は次のとおりです。

 greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 

ここで、曽祖父母はフォームの対象であり、祖父母は第1レベル、親は第2レベル、オブジェクトは第3レベル(私が保存しようとしているもの)です。

ありがとう、私はどんなポインタにも感謝します。

4

2 に答える 2

18

Rails2.3で動作するようにcomplex-form-examplesを更新しました。深くネストされたモデルの例については、ディープブランチを参照してください。

git clone git://github.com/ryanb/complex-form-examples.git
cd complex-form-examples
git checkout -b deep origin/deep
rake db:migrate
script/server

これは私がこれまでに見た中で最もクリーンなソリューションです。バグや改善点を見つけた場合は、GitHubに問題を追加してください。

于 2009-08-04T23:37:25.480 に答える
2

まず第一に、あなたに解決策を投稿してくれたライアンに感謝します。2レベルの形式では非常にうまく機能しますが、より深いネストされた形式で使用すると問題が発生します。add_child_linkすでに追加されている別のパーシャルにを入れたい場合、Firebugはjavascriptエラーを出します。エスケープバグがあるようです。

リンクメソッドに別のオプションを渡すことで、内部パーシャルのエスケープを回避しようとしましたが、これはどういうわけか機能しません。

def add_child_link(name, f, options)
  fields = new_child_fields(f, options)
  fields = escape_javascript(fields) unless options[:already_escaping] == true
  link_to_function name, %{
        var new_object_id = new Date().getTime();
        var html = jQuery("#{fields}".replace(/#{options[:index]}/g, new_object_id)).hide();
        html.appendTo(jQuery("#{options[:where]}")).show();
      }
end

そのためのヒントはありますか?

よろしくお願いします、

マイク

于 2009-08-25T10:01:18.177 に答える