2009-12-03 60 views
0

使用三個對象(Card)獲得數組的最簡單方法是什麼?我已經擁有了其中一個對象?其他兩個應該從數據庫中隨機選擇。活動記錄:獲取兩個隨機對象?

我目前的做法是這樣的:

[ 
    @deck.cards[rand(@deck.cards.size)], 
    @deck.cards[rand(@deck.cards.size)], 
    @mycard 
].sort_by {rand} 

我現在的問題是,有時@mycard兩次顯示了在數組中。這怎麼可以避免?

回答

1

從甲板上獲得一張卡。檢查它不是@mycard的samy。

從甲板上獲得另一張牌。檢查它與@mycard或以前的卡不一樣。

很簡單,我會想。

+0

Yeah-我想也許有一個較短的方式做到這一點,我已經忽略了,但我想不會。 – igul222 2009-12-03 23:51:00

0

除非你在每次抽獎後重新洗牌,否則你不得不從牌組中移除每張牌,在這種情況下,我會再次抽牌,直到你得到一張你還沒有抽出的牌。

2

這樣的事情可能工作:

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 
}