こんな書き方あるんだ的なメモ
環境
$ bin/rails -v
Rails 5.2.2
やり方
今回使うモデル
# == Schema Information # # Table name: users # # id :bigint(8) not null, primary key # name :string(255) # created_at :datetime not null # updated_at :datetime not null # class User < ApplicationRecord has_many :message end
# == Schema Information # # Table name: messages # # id :bigint(8) not null, primary key # name :string(255) # user_id :integer # created_at :datetime not null # updated_at :datetime not null # class Message < ApplicationRecord belongs_to :user end
書き方
createした自分自身をブロックに渡すことができる
User.create!(name: "Taro") { |user| Message.create(user: user) } # (0.3ms) BEGIN # User Create (0.3ms) INSERT INTO `users` (`name`, `created_at`, `updated_at`) VALUES ('Taro', '2018-12-24 17:12:42', '2018-12-24 17:12:42') # Message Create (0.3ms) INSERT INTO `messages` (`user_id`, `created_at`, `updated_at`) VALUES (8, '2018-12-24 17:12:42', '2018-12-24 17:12:42') # (0.4ms) COMMIT # (0.1ms) BEGIN # (0.1ms) COMMIT
同時にコミットしてくれるのでいろいろ整合性を取るときなどに便利。