私はしばらくこれに取り組んできました。私は単純な宝くじのウェブサイトを構築しており、ランダムなチケットを生成しています。私のローカル マシンでは乱数が生成されますが、サーバーではそれらが複製されます。
持っているものの複数のバージョンを試しましたが、重複は同じです。
チケットごとにランダムなチケット番号を作成し、それが作成されていないことを確認する必要があります。
これは私のような50番目のバージョンです:
a = Account.find(current_account)
numTics = params[:num_tickets].to_i
t = a.tickets.where(:item_id => item.id).count
total = t + numTics
if total > 5
left = 5 - t
flash[:message] = "The total amount of tickets you can purchase per item is five. You can purchase #{left} more tickets."
redirect_to buy_tickets_path(item.id)
else
i = 1
taken = []
random = Random.new
taken.push(random.rand(100.10000000000000))
code = 0
while i <= numTics do
while(true)
code = random.rand(100.10000000000000)
if !taken.include?(code)
taken.push(code)
if Ticket.exists?(:ticket_number => code) == false
a.tickets.build(
:item_id => item.id,
:ticket_number => code
)
a.save
break
end
code = 0
end
end
i = i + 1
end
session['item_name'] = item.name
price = item.price.to_i * 0.05
total = price * numTics
session['amount_due'] = total.to_i
redirect_to confirmation_path
end