外部キー制約は好きですか?
O/RマッパーしててもなるべくDBの力は借りたいです。 ということで、Ruby Toolboxで foreign を検索して、ちらちら見て一番人気のforeignerを選びました。基本的にはデータベースに丸投げなので Rails4 でもいまのとこ問題なく使えております。
インストールは Gemfile
に:
gem 'foreigner'
と追加して bundle install
あとはマイグレーションで:
create_table :comments do |t|
t.references :post, null: false, index: true
t.foreign_key :posts, dependent: :delete
end
としておきました。
ついでに確認。
存在しない 外部キーを指定すると保存を失敗する確認。postgresの例:
Comment.create(post_id: 1)
# => PG::Error: ERROR: insert or update on table "comments" violates foreign key constraint "comments_post_id_fk"
キーを指定して、親になるオブジェクトを削除すると消える確認:
Comment.create(post_id: Post.create)
Comment.count
# => 1
Post.count
# => 1
Post.first.destroy
Post.count
# => 0
Comment.count
# => 0
ほむ。良い感じですね。
しかし、Rails4 からは scheme.rb の hash形式が変わってるけどそこには対応してませんでした。
add_foreign_key "comments", "posts", :name => "comments_post_id_fk", :dependent => :delete
パッチがきてなかったら プルリクエストしてみようかな。