我正在使用 Sinatra、Ruby 和 Postgres。我想分页(目前正在尝试使用 will_paginate 但欢迎替代方法建议)结果。
红宝石代码是:
get '/inplay' do
results = DB["select distinct(concat(c.first,' ', c.last)) as candidate, c.id as id, s.shortname as shortname from candidates c, shortmembers sm, shortlists s where sm.short_id = s.list_id and c.id = sm.candidate_id"].map do |row|
{ :id => row[:id], :candidate => row[:candidate], :shortname=>row[:shortname] }
end
halt 200, results.to_json
end
在视图页面中,jquery 是:
$(document).ready(function() {
alert("script");
$('#result').html('');
$.getJSON("/inplay", function(data) {
$.each( data, function( key, value ) {
$('#result').append('<tr><td style=\"background:#E3F6CE;\"><input type=\"checkbox\" id=\"case\" class=\"case\" value=' + this["id"] + '></td><td><a href=\"/edit/' + this["id"] + '\">' + this["candidate"] + '</a></td><td>' + this["shortname"] + '</td></tr>');
});
});
});
这工作正常并产生了一张漂亮的桌子。问题是当我包括:
page = params.fetch "page", 1
per_page = params.fetch "per_page", 10
在红宝石片段中并添加
.paginate(page.to_i, per_page.to_i)
它不再起作用,当然也不会分页。
在我尝试过的视图中:
<%= will_paginate results %>
我还在 ruby DB 调用之后立即包含了 DB.extension(:pagination) 。
问题是:
- 方法错了吗?分页适用于普通数据集,但不适用于 json 结果。
- 如果方法正确,我应该在哪里粘贴片段“.paginate(page.to_i.per_page.to_i)”?我尝试在 .map 和 .to_json 之后链接它,但没有成功。
我被困住了。所有的帮助都欣然接受。