SQL Rails 非现有用户的救援请求
SQL Rails rescue request for non existing user
我有一个小问题。假设我有 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
好吧,这就是我的问题。我可以 select user 1
和 user 2
。 User 4
无法访问。如果它尝试采用 user 3
它 returns 我认为没有 .channel
方法,因为一切都是 nil
然后......我应该怎么做才能达到 users
1, 2, 4 并忽略 user 3
即 nil
?
您可以先获取可用记录 ID 的列表,然后随机选择一个 ID:
ids = User.pluck(:id)
User.select(:channel).where(:id => ids.sample).first.channel
但是当然这需要两个查询,所以如果这不够有效,您可以尝试告诉数据库本身 select 一个随机记录。例如,如果您使用 MySQL,您可以这样:
User.order('rand()').limit(1)
我有一个小问题。假设我有 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
好吧,这就是我的问题。我可以 select user 1
和 user 2
。 User 4
无法访问。如果它尝试采用 user 3
它 returns 我认为没有 .channel
方法,因为一切都是 nil
然后......我应该怎么做才能达到 users
1, 2, 4 并忽略 user 3
即 nil
?
您可以先获取可用记录 ID 的列表,然后随机选择一个 ID:
ids = User.pluck(:id)
User.select(:channel).where(:id => ids.sample).first.channel
但是当然这需要两个查询,所以如果这不够有效,您可以尝试告诉数据库本身 select 一个随机记录。例如,如果您使用 MySQL,您可以这样:
User.order('rand()').limit(1)