SQL Rails对非现有用户的救援请求

时间:2015-05-28 22:01:16

标签: sql ruby-on-rails activerecord null

我有小问题。假设我有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 1user 2User 4无法访问。如果它尝试user 3,则会返回我没有.channel方法,因为所有内容都是nil然后......我该怎么做才能达到users 1,2,4并忽略user 3的{​​{1}}?

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)