0

Rails はよく、私が考える前に他の人が私の問題について考えていることを教えてくれますが、今回は何も見つかりませんでした...

私は 3 つのモデルを持っています:Nodeと(私は Mongoid を使用していますが、問題は ActiveRecord でも同じだと思いますVolume)Filesystem

ノードhas_manyボリュームとファイル システム。ボリュームhas_manyファイル システム。

ボリュームとファイルシステムを同じ「ノード」形式で定義します (ボリュームが追加/変更/削除されると、JS が各ファイルシステムの「ボリューム」選択ボックスを更新します)。このフォームは正常に機能します。

ノードを保存するときにファイルシステムを永続化しようとすると、問題が発生します。

新しいボリュームにはまだ ID がないため、ボリューム名を選択ボックスの値として使用していますが、外部キーは ID です (名前はノード内で一意ですが、異なるノードには同じ名前のボリュームがあるため、名前を ID として使用しないでください)。

とアクションでは、最初にボリュームを保存してから、含まれているボリューム名をそれぞれの IDに置き換えるソリューションを見つける必要がありますnodes_controller。これは非常に汚いので、クリーンな方法で実行できるかどうか疑問に思っています。createupdateparams[:node][:filesystems_attributes]

他の誰かが同じ問題を抱えていましたか?

Node唯一の本当に「クリーンな」ソリューションは、ボリュームとファイルシステムをさまざまな手順で保存することですが、他の多くのネストされたモデル (およびフォーム) が含まれているため、私のアプリは「クリック数が少ないほど良い」必要があります。

4

2 に答える 2

1

ネストされた属性は、あなたが探しているもののようです。それらを Node モデルに追加すれば、準備完了です。

accepts_nested_attributes_for :volumes, :filesystems

フォームヘルパーを使用している場合

<%= form.fields_for :nodes do |nodes_form| %>

サブ属性を定義する方法です。

于 2012-08-27T21:02:59.473 に答える
0

Node の代わりに Filesystem を Volume にネストしたところ、魅力的に機能します。

悪いデザインは悪い質問をします;o)

于 2012-08-30T16:25:47.733 に答える