1

特定の問題の解決策が見つからないか、どこを見ればよいかを十分に理解していません。

Railscast 196/197 に従って新しいオブジェクトを動的に生成するネストされたフォームがあります。has_one と has_many が混在するより深いレベル (3rd) を除いて、これは (Rails 3.0.9 で) 正常に動作します。必要なJavaScriptの変更が理解できないのか、関連付けなのか、ネストされた属性の初期化なのかはわかりません。

簡単にするために、モデルを次のように変換します。幹が 1 つあり、リンゴがたくさんある木があります。各リンゴには、コアが 1 つあり、ワームが多数あります。

新しいツリーを作成すると、Create フォームにトランクのフィールドと、1 つのコアと 2 つのワームを持つ 1 つのリンゴのフィールドが自動的に表示されます (私は、果物がいっぱいで社交的なのが好きです...)。

何らかの理由でトランクがない場合に備えて、条件付きでトランクの「追加」リンクを作成できます。

新しいリンゴの追加リンクを動的に作成できます。ただし、これを行うと、1 つのコアと 2 つのワームで自動的に初期化されません。フォーム自体の場合のように、ツリーコントローラーの「新しい」メソッドではなく、javascript/ヘルパーを介して生成されるためだと思います。

リンゴにはワームが存在しない可能性があるため、それはワームにとってそれほど問題ではありません。ただし、リンゴにはコアが 1 つだけある必要があるため、そのための追加リンクは必要ありません。ただそこにある必要があります。

ただし、理想的には、「リンゴを追加」するたびに 1 つのコアと 2 つのワームが初期化されます。

リンゴを追加するときに、javascript/ヘルパーを適応させてリンゴのネストされた属性 (コアとワーム) を初期化する方法がわかりません。

あるいは、1 つのコア オブジェクトが自動的に初期化されるようにリンゴ オブジェクトを初期化する方法がわかりません。

トランクに対して行うのと同様のことを行うことができるように、ビューを介してツリー コントローラーの apple(s) プロパティのコア プロパティにアクセスする方法がわかりません。つまり、「なんらかの理由でトランクがありません。新しいものを作成してください (または、新しいものを作成するための「追加」リンクを表示してください)」を _form パーシャルで指定します。

= if @tree.trunk.blank? 
  - @tree.trunk= Trunk.new -# or 'display add button'
= f.fields_for :trunk do |builder|
  = render 'shared/trunk_fields', :f => builder

--> これで、あと 1 レベルです。_apple_fields パーシャルに移動して @tree.apple/s.core のようなものを試すと、エラーが発生します。_core_fields パーシャルにさらに進んで、core で blank? をチェックできるようにしようとすると、同じエラーが発生します。多くのアップルのコアの 1 つにアクセスできる正しい構文が見つかりません。とにかく、それは本当に理想的なソリューションではありません。

どんなポインタでも大歓迎です。解決策は本当に簡単だと思いますが、私はこれらすべてに慣れていないため、それを見ることができません...

4

0 に答える 0