モデルの関係性
大まかなモデルは以下のモデルで、あとで出てくるprefectureはアクティブハッシュ を採用している。
userモデル :ユーザー情報
itemモデル :商品情報
orderモデル :購入記録、user_id、item_id を保存したい
order_addressモデル :購入者住所、orderモデル生成時にできるorder_idを保存したい
order_formモデル(フォームオブジェクト)
(prefecture)モデル
オブジェクトフォーム
class OrderForm
include ActiveModel::Model
attr_accessor :user_id, :item_id, :postal_code, :prefecture_id, :municipality, :address, :building_name, :phone_number
with_options presence: true do
validates :user_id
validates :item_id
validates :order_id
validates :postal_code, format: {with: /\A[0-9]{3}-[0-9]{4}\z/, message: "Input correctly"}
validates :prefecture_id, numericality: { other_than: 0, message: 'Select' }
validates :municipality
validates :address
validates :phone_number, format: {with: /\A\d{10}\z|\A\d{11}\z/ , message: "Input only number"}
end
def save
order = Order.create(user_id: user_id, item_id: item_id)
OrderAdress.create(postal_code: postal_code, prefecture_id: prefecture_id, municipality: municipality, address: address, phone_number: phone_number, building_name: building_name, order_id: order.id)
end
end
疑問点
order_idも保存したいからattr_accessor
のなかに記述するのでは?
結論
『order_id』はorderが生成されたと同時に作られるから、そこにはかけない
attr_accessor
の部分はhtmlファイルのフォーム部分で保存したいものの記述
のため、フォームでの段階では保存されない
前提として 保存の順番は orderテーブル → order_adressテーブル (order_idが必要)
だから、attr_accessor
の段階ではorder_adressテーブルに保存したいorder_id
は作られていないから、そこにはかけない
saveの意味
def save
の部分中身の意味はorderコントローラーの記述も見ないとわからない
フォームオブジェクトを振り返ってみて出てきた疑問
今回は1対1の関係性でフォームオブジェクトを使っていたが、
1対多のときは使うことができるのか?使い方は?