前書き
今railsでrake taskを新規作成しています.
そこでrails promotion_code:generateというコマンドを実行するとPromotionテーブルに10個のレコードを作成したい。1つのレコードには2つのカラム(promotion_codeとprice)があり、それぞれ8桁の英数字と数字をランダムで登録したい。
修正前のコード
namespace :promotion_code do desc 'Insert 10_promotion_codes into promotion_table' task :generate => :environment do promotion_records = [] 10.times do promotion_code = SecureRandom.alphanumeric(8) price = rand(100..1500) promotion_records << {promotion_code: promotion_code,price:price } end begin ApplicationRecord.transaction do promotion_records.each do |promotion_record| Promotion.create!( promotion_code: promotion_record[:promotion_code], price : promotion_record[:price] ) end end rescue ActiveRecord::RecordInvalid => e puts e end end
指摘していただいた点
- promotion_records = []にハッシュを挿入しているがそれはしなくても登録できる。
問題点.
①レコード作成.
②配列にレコード挿入.
③レコードを取り出す.
④登録する.
修正後のコード
namespace :promotion_code do desc 'Insert 10_promotion_codes into promotion_table' task :generate => :environment do begin ApplicationRecord.transaction do 10.times do promotion = Promotion.new promotion.promotion_code = SecureRandom.alphanumeric(8) promotion.price = rand(100..1500) promotion.save! end end rescue ActiveRecord::RecordInvalid => e puts e end end end
①レコード作成.
②レコード登録