2011-05-13 47 views
1

我正在尋找一個更做的datamappery方式獲得的第N行(或記錄)以下(因爲下面的代碼依賴於源碼):如何使用DataMapper的

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

您可以使用要求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" 
+0

的'Ad.first:偏移=> N'部分就是我一直在尋找在這種情況下,感謝噸!雖然在一個真正的應用程序中,我只是使用原始的SQL,所以也非常感謝。 – Nilloc 2011-05-16 13:23:13