ドグサレ初心者のへっぽこビッグウェーブ

地球の底辺にいるゴミがプログラミングとか音楽とかを語るクソブログ

データベースはあるが更新はできない

リレーショナルデータベースをつくったものの、作成、編集できないことに気づく。


あかーん


というわけで、とりあえず音楽「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付きでテーブルに書き込めるようにする