获取具有三个对象(Card
)的数组的最简单方法是什么,其中一个我已经拥有?其他两个应该从数据库中随机选择。
我目前的做法如下:
[
@deck.cards[rand(@deck.cards.size)],
@deck.cards[rand(@deck.cards.size)],
@mycard
].sort_by {rand}
我现在遇到的问题是,有时@mycard
会在数组中出现两次。如何避免这种情况?
答案 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
}
答案 1 :(得分:1)
从牌组中取出一张牌。检查它不是@mycard的傻瓜。
从牌组中取出另一张牌。检查它与@mycard或之前的卡不一样。
非常直白,我想过。
答案 2 :(得分:0)
你必须从牌组中取出每张牌,除非你在每次抽签后重新洗牌,在这种情况下我会再画一次,直到你得到一张你还没画过的独特牌。 / p>