解決したいこと
Formオブジェクトに、アソシエーションが定義できないのはなぜか。
立てた仮説
アソシエーションは、モデルを利用した「テーブル同士」の関連付け。
テーブル間アクセスに関する設定なので、
そもそも「テーブルがない」フォームオブジェクトにはつけられないと考えた。
フォームオブジェクトにattr_accessorメソッドで、
モデルの属性を追加し、「操作」可能にはするが、
実際に値を保存するのはモデルのテーブルであって、
フォームオブジェクトのテーブルではない。
上記を踏まえると、
ActiveStorageのhas_one_attachedも
フォームオブジェクトにはつけられないと考える。
こちらも、モデルの1つのレコードのidに紐付いて管理されるので、
そもそもレコードを持てないフォームオブジェクトは使えないと考えた。
質問して確認した結果
考え方はok。
ちなみに、一意制約もフォームオブジェクトはつけられない。
なぜなら、DBに一度検索しに行くから。
has_one_attachedに関しては、同じ意見を持つが、
検証してみないと確実な答えは出ない。
感想
has_one_attachedについては、一度検証してみたいと思った。
横道が気になりすぎてオリアプがつくれないと本末転倒なので、
まずはそちらに注力する。