我使用SQLite在Rails 4上,我有一个75,000引号的数据库。我想从这个数据库中获取一个随机记录(引用)并显示给用户查看。我环顾四周,但我在这里搜索过的方法还没有找到。这是抓取第一条记录并显示它的代码:
=if(mround(F10,10000) = mround(e10,10000),0,vlookup(.....
我也尝试了以下方法,但这会返回一个长字母数字值而不是引号。
<% Quote.limit(1).all.each do |quote| %>
<%= quote.quote %> :: <%= quote.author %> :: <%= quote.genre %>
谢谢!
答案 0 :(得分:2)
在SQL调用中不要order by random()
。这是非常低效的,因为您的数据库必须为每一行调用随机函数,为其赋值,然后对其进行排序。随着行数的增长,这变得非常慢。
你的第二种方法应该有效,是一种更好的解决方案。我用我自己的数据库尝试了它,它的工作原理。 rand_record
将是Quote
对象 - 而不是引用字符串本身。我会这样做:
在您的控制器操作中:
random_offset = rand(Quote.count - 1)
@random_quote = Quote.offset(random_offset).first
在您看来:
<%= @random_quote.quote %> :: <%= @random_quote.author %> :: <%= @random_quote.genre %>
我们从计数中减去一个的原因是,如果我们选择一个与Quote记录数相同的偏移量,那么我们对fetch的调用将为nil,因为查询的偏移量太多了。