1

我正在使用 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) 。

问题是:

  1. 方法错了吗?分页适用于普通数据集,但不适用于 json 结果。
  2. 如果方法正确,我应该在哪里粘贴片段“.paginate(page.to_i.per_page.to_i)”?我尝试在 .map 和 .to_json 之后链接它,但没有成功。

我被困住了。所有的帮助都欣然接受。

4

0 回答 0