ドキュメントを読み込むのは大事、ということでRailsガイドを頭から読んでいく取り組みをしています。 各章ごとに、(Railsガイドにちゃんと書いてあるのに)知らなかった機能を雑にまとめていきます。
今回は、マイグレーションの章です。
create_join_tableを使った多対多の中間テーブルの作成
リンクはこちら
railsチュートリアルでやるように、has_many
を使う方法しか知らなかったです。
この方法では、中間テーブルを明示的にはモデルとして扱わないので、用途は限定的かもしれませんが、機能として足りるときはスッキリ書けそうです。
ちなみに、各モデルにhas_and_belongs_to_many
を記述することで多対多の関係を記述できます。
class Product < ApplicationRecord has_and_belongs_to_many :categories end
add_check_constraint で制約をつける
リンクはこちら
rails6.1から追加されたみたいです。 マイナスの値が入る可能性のないケースとかは結構あると思うので、使えそうです。
class AddPriceToProducts < ActiveRecord::Migration[7.0] def change add_column :products, :price, :integer add_check_constraint :products, "price > 0", name: "price_check" end end
Product.create(price: -100) # => ActiveRecord::StatementInvalid
revertでロールバックする
リンクはこちら
今までテーブルの削除時などdrop_table
で書いたりしてましたが、時短できるケースもありそうです。
以下のように書くことで、drop_table
と同じことをしていることになるみたいです。
class RevertCreateProducts < ActiveRecord::Migration[7.0] def change revert do create_table :products do |t| t.timestamps end end end end