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をStringと比較しようとしている理由を説明できる、単純な「すべてが文字列」の問題があると思います。ページおよびページごとの値は 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

paginate が生成するクエリは、そこから何かを取得しようとするまで評価されません。そのため、@links.eachテンプレートに入るまでエラーは発生しません。

于 2013-04-26T17:52:14.083 に答える