我正在寻找一种更加数据化的方法来执行以下操作(因为下面的代码依赖于sqlite):
id = repository(:default).adapter.query(
'SELECT id FROM ads ORDER BY random() LIMIT 1'
)
@ad = Ad.get(id)
我希望做的事情如下:
@ad = Ad.get(:offset=>rand(Ad.all.count))
或
@ad = Ad.find(:offset=>rand(Ad.all.count), :limit=>1)
基本上我只是想找一种通过偏移或行号获取行的方法。抱歉,如果已经提出这个问题,我不确定要搜索哪些词汇,因为我是Ruby和Datamapper的新手
答案 0 :(得分:1)
您可以使用请求Ad.first :offset => rand(Ad.count)
,但它会调用2个SQL语句:
SELECT COUNT(*) FROM "ads"
SELECT "id" FROM "ads" ORDER BY "id" LIMIT 1
您也可以使用原始SQL:
repository.adapter.select "SELECT * FROM ads ORDER BY RANDOM() LIMIT 1"