0

rails3 の nested_form ジェムを使って何か良いことをしようとしています。(私はこの宝石を使用できませんでしたが、Rails3 は常にこのことを行うために宝石を必要とするようです...そして、Google は常に、レール 3 のネストされたフォームのために私をこの宝石にリダイレクトします)

だから私はこのアーキテクチャを持っています:

  • Model1 has_many Model2 (, :dependent => :nullify)
  • Model1 has_many Model3 (, :dependent => :nullify)
  • Model2 は Model1 に属します
  • Model2 は Model3 に属します
    • accept_nested_attributes_for :model3、:limit => 1
    • attr_accessible :model3_attributes
  • モデル 3 has_many モデル 2
  • Model3 は Model1 に属します

バックオフィスでのアイデアは、Model1 を作成し、次にネストされた Model2 を作成し、Model2 の作成フォームで、リストで選択するか、新しい Model3 を作成することです。

私は多くのことを足場にかけましたが、今はその方法についてのドキュメントを探していますが、rails3 はすべてを「推測」するため、助けが必要です。

現在:

  1. Model3 が作成されていれば、すべてが機能します。ここに私の Model2 フォームがあります: http://pastebin.com/6te9fSK8 (リストに表示され、選択します)
  2. 今、私は「新しいモデル3」機能が欲しいと思っていました。だから私はnested_formの宝石を追加しました
  3. このコードを追加しましたhttp://pastebin.com/nzqVzwzn
  4. まず、編集の場合、「機能」します。新しいモデル 3 を作成すると、リストに追加され、以前のモデルが置き換えられます。
  5. しかし、レビューの後、新しいものを追加したいたびに、追加した古いものを置き換えます。JavaScript の問題のようです (jQuery9 を使用しています)
  6. 新しいモデル 1 を作成してからネストされたモデル 2 を作成すると、モデル 3 リストは空になります。そのため、新しいフィールドで新しいモデル 3 を追加しても、フォームは (空の) リストからモデル 3 を選択することを想定しています。フォームからリストを削除しても、まだ待機中のモデル3を選択し、追加した新しいモデル3を気にしません。(新しいモデル1を作成するときにデフォルトのモデル3を作成することでそれをバイパスできますが、弱いパッチのように見えます...)

:model1_id から @model1 を見つけるために保護されたメソッドを追加した model2 を除いて、コントローラーには触れませんでした。

  class Models2Controller < ApplicationController
      before_filter :get_model1

      ...
      protected
      def get_model1
        @model1 = Model1.find(params[:model1_id])
      end

これを適切に管理する方法について誰かが私を助けることができれば、それは本当に役に立ちます。

ありがとうございました

4

1 に答える 1

1

これは非常に長い質問であり、非常に長い回答が必要です。196 Nested Model Form part1197 Nested Model Form part2、および複雑なフォームなど、さらにいくつかを見ることをお勧めします。

一般に、モデルに含めることで、任意のモデルに他のモデルのインスタンスを作成させることができaccepts_nested_attributes_for :modelます。したがって、Model1 は Model2 を受け入れ、Model2 は Model3 を受け入れます。Model2 では (これをコントローラーに入れたいと思うのはわかっていますが、入れないでください)、Model3 インスタンスの ID を取得したかどうか、または新しい Model3 の属性を取得したかどうかを確認するファクトリ メソッドを使用できます。必要に応じて作成します...

上記のスクリーンキャストは、フォーム階層に関する方法を示しています。状況に応じて編集する必要がある唯一の部分は、最後のステップが新しいモデルまたは既存のモデルであるということですが、それは問題ではありませんとにかく:)

于 2013-01-28T12:00:49.103 に答える