私にはかなり標準的なユースケースがあります。親オブジェクトと子オブジェクトのリストがあります。表の行として、すべての子を一度に編集できる表形式が必要です。また、1つ以上の新しい行を挿入し、送信時にそれらを新しいレコードとして作成できるようにしたいです。
を使用しfields_for
て、has-manyによって関連付けられたネストされたレコードの一連のサブフォームをレンダリングすると、railsはフィールド名を生成parent[children_attributes][0][fieldname]
しparent[children_attributes][1][fieldname]
ます。
これにより、Rackは次のようなparamsハッシュを解析します。
{ "parent" => {
"children" => {
"0" => { ... },
"1" => { ... } } }
新しい(永続化されていない)オブジェクトが渡されるfields_for
と、次のようなフィールド名が生成されます。
parent[children_attributes][][fieldname]
[]
インデックスが含まれていないことに注意してください。
ラックが混乱して発生するため、、などを含むフィールドと同じ形式で投稿することはできません。[0]
[1]
TypeError: expected Array (got Rack::Utils::KeySpaceConstrainedParams)
「OK」と私は思います。「すべてのフィールドで[]
フォームではなくフォームを使用するように[index]
します。しかし、これを一貫して行うよう説得する方法がわかりませんfields_for
。明示的なフィールド名のプレフィックスを付けてもおよびオブジェクト:
fields_for 'parent[children_attributes][]', child do |f| ...
永続化されている限りchild
、フィールド名は自動的に変更され、たとえばparent[children_attributes][0][fieldname]
、新しいレコードのフィールド名は。のままになりparent[children_attributes][][fieldname]
ます。もう一度、ラックバーフ。
私は途方に暮れています。標準のRailsヘルパーをどのように使用して、既存のレコードとともに複数の新しいfields_for
レコードを送信し、それらをparamsの配列として解析し、IDのないすべてのレコードをDBの新しいレコードとして作成するのですか?運が悪かったので、すべてのフィールド名を手動で生成する必要がありますか?