2

我正在尝试在我的 rails 应用程序中使用 will_paginate 进行分页。

在我的控制器中,我有

def index
    params[:per_page] ||= 25
    params[:page] ||= 1
    @links = Link.order('created_at DESC').page(params[:page]).per_page(params[:per_page])
end

在我看来我有

 <ul>
  <% @links.each do |entry| %>
  <li><%= link_to entry.title, entry.url %></li>
  <% end %> 
<ul>
<%= will_paginate @links %>

我收到错误

comparison of Fixnum with String failed

Extracted source (around line #8):

5: </h2>
6: 
7: <ul>
8:   <% @links.each do |entry| %>
9:   <li><%= link_to entry.title, entry.url %></li>
10:   <% end %> 
11: <ul>

我不知道为什么。我已经尝试重新启动服务器。我错过了一些明显的东西吗?

提前致谢。

4

1 回答 1

7

我猜您有一个简单的“所有内容params都是字符串”问题,这可以解释为什么有人试图将 Fixnum 与字符串进行比较。page 和 per-page 值应该是 Fixnums 但如果它们来自params,它们将是字符串。最简单的方法是添加几个to_i调用,如下所示:

def index
    params[:per_page] ||= 25
    params[:page] ||= 1
    @links = Link.order('created_at DESC').page(params[:page].to_i).per_page(params[:per_page].to_i)
    #---------------------------------------------------------^^^^
    #------------------------------------------------------------------------------------------^^^^
end

在您尝试从中获取某些内容之前,不会评估分页生成的查询,这就是为什么您@links.each在模板中之前不会收到错误的原因。

于 2013-04-26T17:52:14.083 回答