在 rails 中创建下一页的链接



>我正在rails应用程序中使用Twilio API向用户显示他们的录音列表。 假设一个用户总共有 11 个录音,我每页显示 3 个录音。

twilio_controller.rb

def calls
@user = current_user
@account_sid = @user.twilio_account_sid
@auth_token = @user.twilio_auth_token
@page_size = 3
@page = params[:page_id] || 0
@sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token)
@subaccount = @sub_account_client.account
@recordings = @subaccount.recordings
@recordingslist = @recordings.list({:page_size => @page_size, :page => @page})
end

calls.html.erb

<% @recordingslist.each do |recording| %>
 <tr>
  <td><%= recording.sid %></td>
 </tr>
<% end %>
<%= link_to "Next Page", twilio_calls_path(@page + 1) %>

路线.rb

#twilio routes
 post 'twilio/callhandler'
 get 'twilio/calls'
 match 'twilio/calls' => 'twilio#page', :as => :twilio_page # Allow `recordings/page` to return the first page of results
 match 'twilio/calls/:page_id' => 'twilio#page', :as => :twilio_page

分页信息内置于 Twilio 响应中,以便

@recordingslist.next_page

给了我接下来的 3 个录音(在 Rails 控制台中验证)。 如何链接到该链接,以便当用户单击链接时,表格加载接下来的 3 个结果?

谢谢!

您可以使用像

Kaminari 这样的宝石进行分页。

https://github.com/amatsuda/kaminari

我建议使用twilio-ruby附带的分页功能。根据文档:

ListResource.list() 接受分页参数。

首先为您的 Twilio 列表视图创建路由。确保可以传递 page_id 参数 – 这就是控制器操作知道要呈现哪个页面的方式:

# config/routes.rb
match 'recordings/page/:page_id' => 'twilio#page', :as => :twilio_page
match 'recordings/page' => 'twilio#page', :as => :twilio_page # Allow `recordings/page` to return the first page of results

然后,在page操作中,拉取page_id参数(如果没有page_id,则将 if 设置为 1,并将page_numberpage_size作为参数传递给@recordings.list

# app/controllers/twilio_controller.rb
def page
    page_size = 3
    @page = params[:page_id] || 1
    @sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token)
    @subaccount = @sub_account_client.account
    @recordings = @subaccount.recordings
    @recordingslist = @recordings.list({:page_size => page_size, :page => page)})
end

最后,在您的视图中,将页码传递给link_helper中的twilio_page_path - 只需确保相应地调整页码(下一页+1,上一页-1

# view
<%= link_to "Next Page", twilio_page_path(@page.to_i + 1) %>
<%= link_to "Previous Page", twilio_page_path(@page.to_i - 1) %>

请注意,如果您位于列表的开头或末尾,则可能会无意中传递无效page_id。因此,您可能希望在page控制器操作中实现一些异常处理:

# app/controllers/twilio_controller.rb
def page
    begin
        @page = params[:page_id] || 1 # If `page_id` is valid
    rescue Exception => e
        @page = 1 # If `page_id` is invalid
    end
    # Remaining logic...
end

最新更新