はじめに
プログラミング初心者です。現在Ruby on Railsにてアプリ作成中終盤。
間違っている箇所がありましたら、コメントお願いします。
Formオブジェクトについて
今回Formオブジェクトという新しい概念を学びました。
このFormオブジェクトの目的は、1つのフォームから送られてきた情報を複数のテーブルに保存することです。
手順
1.Formオブジェクト用のモデルを作成します。
保存したいテーブルがorder(注文情報)とaddress(注文者の情報)だったら、order_address.rbというファイルを自主作成します。
2.そのファイルにform_withで使用する機能とバリデーションを作成します。
include ActiveModel::Model
attr_accessor :hoge, :hogehoge,:hogehogehoge ~~~~
↓以下バリデーションの記述
3.データをテーブルに保存する処理
↑バリデーションの記述
ef save
order = Order.create(hoge: hoge, hoge_id: hoge_id, hoge_id: hoge_id)
Address.create(hoge: hoge, hoge_id: hoge_id ~~~~)
end
あとは
コントローラーはorders_controller.rbで大丈夫です。
しかし、コントローラー内にはしっかり@order_addressのインスタンスを作成します。
ざっくり以上です。
本日のエラー
本日のエラーとして次の二つの壁にぶち当たりました。
・フォームを入力して保存しようとすると、NoMethodErrorが出てしまった。
・上記が解決すると、次はActiveHashのprefecture_idが保存されない
NoMethodErrorの原因
エラーによるとActiveHashのprefecture_id(都道府県)が存在しないよ〜というものでした。原因はなんとも単純、
attr_accessor :post_code, :prefecture_id, :city, : ~~~
この部分のprefecture_idの"id"が抜けていただけでした、、、、。
次、切り替えていこう、、、。
Activehashが保存されない
またまたActiveHashのprefecture_idのエラーです。
ビュー画面を見ても空欄ですよ〜というエラーメッセージが出るばかりなので、コンソールを見てみました。
すると、prefecture_idが正しいのですが、なぜかコンソール上はprefectured_idになっていました。(prefecturedって笑)
原因のindex.html.erbのフォーム内を修正して解決です⭐️