0
0

Formオブジェクト

Posted at

はじめに

プログラミング初心者です。現在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のフォーム内を修正して解決です⭐️

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0