2016-02-14 87 views
2

我使用'will-paginate'gem來使用分頁。下面的這段代碼工作得很好。雖然我在WHERE子句中使用了相同的字符串,但爲什麼不能分頁?

@cafe = Cafe.where('id = 7 or id = 6 or id = 3 or id = 2 or id = 1').paginate(:page => params[:page], :per_page => 4) 

但是,當我使用下面的代碼,

@caves_ids = @caves.collect(&:id) 
@sql = 'id = '[email protected]_ids[0].to_s 
for i in [email protected]_ids.size-1 
    @sql += ' or id = '[email protected]_ids[i].to_s 
end 
@cafe = Cafe.where(@sql).paginate(:page => params[:page], :per_page => 4) 

四個職位出來以及在第一頁,但是當我點擊第2頁按鈕,下面的錯誤信息出現:

SQLite3::SQLException: near ")": syntax error: SELECT "caves".* FROM "caves" WHERE (id =) LIMIT 4 OFFSET 4 

@sql'id = 7 or id = 6 or id = 3 or id = 2 or id = 1'肯定是相同的!(因爲我確認它幾百倍。)

這是爲什麼發生?

回答

1

好像你的@caves_ids數組是空的。 無論如何,我建議你使用下一個解決方案:

@cafe = Cafe.where(id: [7,6,3,2]) 

在你的情況陣列@caves_ids,但是當它是空的,你沒有得到語法錯誤。

+0

號,這顯然是不空的,因爲'@ sql'值爲''ID = 7或ID = 6或ID = 3或ID = 2或ID = 1 ''... –

+0

它沒有分頁工作? – Ilya

+0

查看生成的SQL命令'... SELECT「caves」。* FROM「caves」WHERE(id =)...' - > so'@ caves_ids'必須爲空數組。你能再檢查一次嗎? –

0

嘗試通過以下方式

@caves_ids = @caves.pluck(:id) 
@caves_ids.count.each do |id| 
@[email protected]+' or id='+id.to_s 
end 
@cafe = Cafe.where(@sql).paginate(:page=>params[:page],:per_page => 4) 
+0

謝謝你的回答,但@caves_ids是數組。 這是錯誤消息。 '未定義方法'拔'爲#' –

相關問題