データベースはあるが更新はできない
リレーショナルデータベースをつくったものの、作成、編集できないことに気づく。
あかーん
というわけで、とりあえず音楽「music」とアーティスト「artist」のテーブルを同時に
編集できるようにしたいのだが
has_and_belongs_to_manyメソッドを使ったばっかりに不都合が、、、
世の中には基本的に has_many のthroughオプションを使うことが多いのか
リファレンスを探してみても前者のものがみつからない
試しにhas_many方式を中間テーブル無視でつくったけども
メソッドだかなんかが見つからないって怒られて動かず。
くぅーむ
あかーん
とりあえず「has_and_belongs_to_many」→「HABTM」と略すのだけは覚えた
プロに聞く。
どうやら、m:nは最後の手段らしい。
というのも、m:nのテーブルリレーションを作ると、構成がかなり複雑になるため、
メンテナンスなど諸々の点であまりよろしくないらしい。
なので、そもそもDBを構築する段階で、できるだけm:nは排除し、
1:nの形でのリレーションを作ることがまずやるべきこと、なのだそう。
勉強になります。
と、いうわけで、
artist : music = 1 : n の形でリレーションを作ることにしました。
そして、やり方として「artistsの中にmusicsをネストする」ということをすべきです。と。
やるべきこと
- ルーティングの修正:musicsをartistにネストする
- モデルの修正:アソシエーション関係を整理、has_manyだけでよいはず
- ビューの修正:
- artistからmusicsを新規作成できるようにする。
- artistからmusicsの一覧が見られるようにする(artistソートのmusic一覧)
- コントローラの修正:アソシエーション関係を考慮した呼び出しを行う。で、適切なインスタンス変数の受け渡しを行う。
future work
- musicsから呼び出してもartists付きでテーブルに書き込めるようにする