DBテーブル間の結びつき その2【belongs_to の方のモデルで出来ること】
前回のエントリのように、都道府県テーブルと市区町村テーブルがあるときに、市区町村テーブルのモデル側から、その市区町村に結びつけながら都道府県も同時に作成できます。
と言っても、これまた分かりづらいでしょうから例で説明しますね。
DBとモデルは、前回と同じとします。
都道府県テーブルと市区町村テーブルにデータが入っていて、都道府県モデルが has_many、市区町村モデルが belongs_to なのでしたね。
そして、ここで「東京都港区の乱」が起きたと勝手に想定してみましょう。港区は、あまりに高い固定資産税の割に薄遇なのを不満に大阪府に寝返りました。というストーリーです。
港区を大阪府に寝返らせてみましょう。
ここでポイントは、
1.現状、都道府県テーブルに大阪府は入っていない
2.現状、港区は東京都として市区町村テーブルに登録されている
ですね。
なので、やることとしては、
1.都道府県テーブルに大阪府を追加する。
2.港区の都道府県IDを東京都から大阪府に更新する。
です。
今回 belongs_to 宣言をしたことによって、↑を実現するためのコードを、コントローラなどへ鮮やかに書くことができます。
しかもやり方が何通りがありますので、書いておきます。
その1 build_* を使うやり方
その2 = を使うやり方
その3 create_* を使うやり方
その1とその2が似ていますね。その3がちょっと違います。
てな具合で、スッキリとしたコードが書けるんだぞー、という訳でした。
おまけちゃん:
やっぱり港区は大阪府から東京都に返還になりました、をやりたい時
次回は、has_one というものについて説明しようかな、なんて思っています。
【広告】
と言っても、これまた分かりづらいでしょうから例で説明しますね。
DBとモデルは、前回と同じとします。
都道府県テーブルと市区町村テーブルにデータが入っていて、都道府県モデルが has_many、市区町村モデルが belongs_to なのでしたね。
そして、ここで「東京都港区の乱」が起きたと勝手に想定してみましょう。港区は、あまりに高い固定資産税の割に薄遇なのを不満に大阪府に寝返りました。というストーリーです。
港区を大阪府に寝返らせてみましょう。
ここでポイントは、
1.現状、都道府県テーブルに大阪府は入っていない
2.現状、港区は東京都として市区町村テーブルに登録されている
ですね。
なので、やることとしては、
1.都道府県テーブルに大阪府を追加する。
2.港区の都道府県IDを東京都から大阪府に更新する。
です。
今回 belongs_to 宣言をしたことによって、↑を実現するためのコードを、コントローラなどへ鮮やかに書くことができます。
しかもやり方が何通りがありますので、書いておきます。
その1 build_* を使うやり方
minatoku = City.find_by_name('港区')
minatoku.build_prefecture(:name => '大阪府', :katakana => 'オオサカフ') # この時点で何もDBは変わらない。
minatoku.save! # この時点で大阪府がDBに追加され、港区が大阪府になる
その2 = を使うやり方
minatoku = City.find_by_name('港区')
minatoku.prefecture = Prefecture.new(:name => '大阪府', :katakana => 'オオサカフ') # この時点で何もDBは変わらない。
minatoku.save! # この時点で大阪府がDBに追加され、港区が大阪府になる
その3 create_* を使うやり方
minatoku = City.find_by_name('港区')
minatoku.create_prefecture(:name => '大阪府', :katakana => 'オオサカフ') # この時点で大阪府がDBに入る。港区は東京都のまま。
minatoku.save! # これをやって初めて、港区が大阪府になる。
その1とその2が似ていますね。その3がちょっと違います。
てな具合で、スッキリとしたコードが書けるんだぞー、という訳でした。
おまけちゃん:
やっぱり港区は大阪府から東京都に返還になりました、をやりたい時
minatoku.prefecture = Prefecture.find_by_name('東京都')
minatoku.save!
次回は、has_one というものについて説明しようかな、なんて思っています。
【広告】