QA@IT

Rails ネストしたformの子要素だけを保存

3428 PV

class Order
  has_many :addresses 
  accepts_nested_attributes_for :addresses 
  #Order(注文)はaddresses(複数の届け先)を持つ、といった感じです
end

class Address
  belongs_to :order
end

formは入れ子になっていて、form_for @order の中にfields_for :addressesといった構造になっています。

期待する流れとしては、

Order#newページで

  • 0.address(届け先)の数を指定、数の分だけformを生成。 ※タイトルとはずれますが、ここでもつまずいています
  • 1.addressを入力する
  • 2.addressを保存する(submit)
  • 3.address(届け先)が複数あったら、1,2を生成した数だけ繰り返す
  • 4.orderをsubmitして注文を確定!

なのですが、現状

Order#newページで

  • 1.addressを入力する
  • 2.addressを保存する(submit) ……といきたいのですが、実際はOrderのcontroller#create(4.orderをsubmit)へ飛んでしまい、思うように動作してくれません。

actionやcontrollerを指定したり、Ajaxを試してみたりしているのですが、やはりうまくいきません。

何か良い方法はありませんでしょうか。
そもそもネストしている構造自体が間違っているのでしょうか?
(ネストしていなければ複数のformが作れない?と思っています)

そのあたりのこと(よろしければ※formを生成云々も)を教えていただけると幸いです。

回答

全体を order にポストするなら、parms という配列からから adresses の情報を取り出した配列かなにかを作成して Adresse モデルを new して保存すればよいと思います。

Ajax であれば、form_for か form_tag の post 先を、オーダー決定ボタン押下なのか、アドレス決定ボタン押下なのかに応じて、JS で変更すればよいと思います。

要件次第ですが、おそらく実装力をつけて頑張れば、SE/PG的立場でのみみれば、設計はどちらでもよいと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。