ランダムなアイテムジェネレーターがあります。これがring.rbのコードです。
class Ring < ActiveRecord::Base
belongs_to :user
after_initialize :randomly_make_ring
def randomly_make_ring
#everything is figured during initialization
#You can call instance.make_ring to do it at any time.
#chance calculation for description
random_description = rand(1000)
case random_description
when 0..500
self.description = 'Silver'
when 501..800
self.description = 'Gold'
when 801..1000
self.description = 'Diamond'
end
#Chance Calculation for Quality
random_quality = rand(1000)
case random_quality
when 0..500
self.quality = 'Sturdy'
when 501..800
self.quality = 'Elegant'
when 801..1000
self.quality = 'Platinum'
end
# Attributes according to the description
case description
when 'Silver'
self.min_guard_roll = 1
self.max_guard_roll = 2 + rand(4)
self.min_pet_roll = 0
self.max_pet_roll = 1
self.min_trap_roll = 0
self.max_trap_roll = 2
self.buy = 20 + rand(15)
when 'Gold'
self.min_guard_roll = 2
self.max_guard_roll = 3 + rand(7)
self.min_pet_roll = 1
self.max_pet_roll = 3
self.min_trap_roll = 1
self.max_trap_roll = 3
self.buy = 30 + rand(25)
when 'Diamond'
self.min_guard_roll = 4
self.max_guard_roll = 5 + rand(10)
self.min_pet_roll = 2
self.max_pet_roll = 5
self.min_trap_roll = 2
self.max_trap_roll = 6
self.buy = 80 + rand(48)
end
# Attributes according to the quality
case quality
when 'Sturdy'
self.min_guard_roll = self.min_guard_roll + 1
self.max_guard_roll = self.max_guard_roll + (1 + rand(2))
self.buy = self.buy + (10 + rand(6))
when 'Elegant'
self.min_guard_roll = self.min_guard_roll + 2
self.max_guard_roll = self.max_guard_roll + (2 + rand(3))
self.buy = self.buy + (25 + rand(14))
when 'Platinum'
self.min_guard_roll = self.min_guard_roll + 4
self.max_guard_roll = self.max_guard_roll + (4 + rand(8))
self.buy = self.buy + (45 + rand(25))
end
# Generate display name
self.display_name = quality + ' ' + description + ' Ring'
# Generate Sell Value
self.sell = self.buy * ((10 + rand(20)).to_f / (31 + rand(20)).to_f).to_f
end
attr_accessible :user, :active, :display_name, :description, :buy, :sell, :min_guard_roll, :max_guard_roll, :min_trap_roll, :max_trap_roll, :min_pet_roll, :max_pet_roll, :image
終わり
これが私のコントローラーと私が設定したアクションです:
def create
@ring = Ring.new
@ring.user = current_user
@ring.save
@user = current_user
@user.gold = @user.gold - 25
@user.save
redirect_to ring_path(:id => @ring.id)
end
def show
@ring = Ring.find(params[:id])
end
私が抱えている問題は、リングが作成されるたびに、表示ページのページに移動しますが、リングにはDBに保存されたものとは異なる属性があることです。そのため、正しいリングを取得していません。理由がわからないため、ページが表示または更新されるたびに新しいリングが生成されます。@ringを表示してプロパティを表示するページでも同じことが起こります。
私がこれを機能させたい正確な方法は、ユーザーが指輪を探すことができ、それからランダムな指輪を表示することです。彼らはそれを購入するか、別の指輪を見るかを選択できます。彼らがそれを買うことを選ぶならば、それはそこにあります、彼らが別のものを見ることを選ぶならば、現在のものは破壊されます。
誰かが私にこれが起こっている理由とこれを設定するより良い方法があるかどうかを理解するのを手伝ってもらえますか?ありがとう!