如何使用Datamapper获取第N行(或记录)

时间:2011-05-13 16:06:43

标签: datamapper

我正在寻找一种更加数据化的方法来执行以下操作(因为下面的代码依赖于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的新手

1 个答案:

答案 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"