現時点では、次のようなゲームのトレーディングカードのパックを生成するためのコードがいくつかあります。
class Pack < ActiveRecord::Base
belongs_to :user
belongs_to :release
has_and_belongs_to_many :cards
after_create :fill_pack
private
# Randomly generate pack contents
def fill_pack
ids = self.release.cards.pluck(:id)
(15).times do |i|
self.cards << Card.find(ids[rand(ids.length)])
end
end
end
私に関係する特定の部分はですself.cards << Card.find(ids[rand(ids.length)])
。これは15のSELECTクエリを作成しています!それはおそらく悪い考えです。;)
私はすでに、以前に取得したIDのリストを持っています。私がそれらを使うことができる何らかの方法があるに違いありませんね?私は試しself.cards.create :card_id => ids[rand(ids.length)]
ましたが、self.cards.createは新しいカードを作成するためのものであり、新しい参照ではありません。