使用三個對象(Card
)獲得數組的最簡單方法是什麼?我已經擁有了其中一個對象?其他兩個應該從數據庫中隨機選擇。活動記錄:獲取兩個隨機對象?
我目前的做法是這樣的:
[
@deck.cards[rand(@deck.cards.size)],
@deck.cards[rand(@deck.cards.size)],
@mycard
].sort_by {rand}
我現在的問題是,有時@mycard
兩次顯示了在數組中。這怎麼可以避免?
使用三個對象(Card
)獲得數組的最簡單方法是什麼?我已經擁有了其中一個對象?其他兩個應該從數據庫中隨機選擇。活動記錄:獲取兩個隨機對象?
我目前的做法是這樣的:
[
@deck.cards[rand(@deck.cards.size)],
@deck.cards[rand(@deck.cards.size)],
@mycard
].sort_by {rand}
我現在的問題是,有時@mycard
兩次顯示了在數組中。這怎麼可以避免?
從甲板上獲得一張卡。檢查它不是@mycard的samy。
從甲板上獲得另一張牌。檢查它與@mycard或以前的卡不一樣。
很簡單,我會想。
除非你在每次抽獎後重新洗牌,否則你不得不從牌組中移除每張牌,在這種情況下,我會再次抽牌,直到你得到一張你還沒有抽出的牌。
這樣的事情可能工作:
class Card < ActiveRecord::Base
belongs_to :deck
named_scope :random, lambda {
{ :offset => Kernel.rand(Card.count) }
}
named_scope :not_in, lambda { |a|
{ :conditions => [ 'id NOT IN (?)', a ] }
}
end
my_cards = []
@mycard = Card.last
my_cards << @mycard
2.times {
my_cards << @deck.cards.not_in(my_cards.collect(&:id)).random
}
Yeah-我想也許有一個較短的方式做到這一點,我已經忽略了,但我想不會。 – igul222 2009-12-03 23:51:00