ume

rails7 メンターさんのコードレビューを通して指摘していただいたこと

前書き

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

①レコード作成.
②レコード登録

まとめ