我有小问题。假设我有users
1,2和4.现在我尝试使用此查询:
User.select(:channel).where(:id => rand(1..User.count)).first.channel
在这种情况下,这样工作:
User.select(:channel).where(:id => rand(1..3)).first.channel
嗯,这就是我的问题。我可以选择user 1
和user 2
。 User 4
无法访问。如果它尝试user 3
,则会返回我没有.channel
方法,因为所有内容都是nil
然后......我该怎么做才能达到users
1,2,4并忽略user 3
的{{1}}?
答案 0 :(得分:1)
您可以先获取可用记录ID列表,然后选择一个随机ID:
ids = User.pluck(:id)
User.select(:channel).where(:id => ids.sample).first.channel
但是当然需要两个查询,所以如果效率不高,你可以尝试告诉DB自己选择一个随机记录。例如,如果你使用MySQL,你可以这样:
User.order('rand()').limit(1)