0

私はこれを過去2時間成功させようとしてきましたが、それは本当に簡単なことだと確信しています:)

そのため、ユーザーがいくつかのキーワードに基づいて検索できるフォームがあります。フォームコードは次のとおりです。

<%= form_tag search_by_description_path,:method => "get" do %>
        <div class="column span-3">
            <label>Search</label>
        </div>

        <div class="column span-5">
            <input type="text" name="search_keywords" id="search_keywords"/>
        </div>

        <div class="column span-6">
            <%= collection_select :category,:id,Category.all,:id,:name,:include_blank => "Everything" %>
        </div>

        <div class="column span-3">
            <%= submit_tag "search" %>
        </div>

    <% end %>

私はこれを持っていますroutes.rb

get "search_by_description" => "search#search_by_description",:as => "search_by_description"

コントローラーにこれがあります:

def search_by_description
    category    = params[:category_id]
    kw          = params[:search_keywords]
    @results = Posts.where("description LIKE ?","%#{kw}%").page(params[:page])
end

私が追跡していないという事実を無視してcategory_idください。私の見解では、これがあります:

<%= render "results",:locals => {:results => @results} %>
<%= paginate(@results) %>

問題は、2 番目のページに移動しても、何も表示されないことです。コンソールを見ると、最初のページで次の SQL が生成されていることに気付きました。

 SELECT "posts".* FROM "posts" WHERE (description LIKE '%lorem%') ORDER BY id LIMIT 25 OF
SELECT COUNT(*) FROM "posts" WHERE (description LIKE '%lorem%')

2番目のみ:

SELECT COUNT(*) FROM "posts" WHERE (description LIKE '%lorem%') LIMIT 25 OFFSET 25

私にいくつかの提案をしてください、私は自分のページネーションを書くことに頼りたくありません:)

4

2 に答える 2

4

この問題の根本的な原因は ActiveRecord 3.0 のバグであり、ActiveRecord 3.1 で修正される予定ですhttps://github.com/rails/rails/commit/d5994ee https://github.com/rails/rails/commit/28c73f0

そして、ActiveRecord 3.0 で動作するようにカミナリにモンキーパッチを適用しましたhttps://github.com/amatsuda/kaminari/blob/9d0eebe38e2a22fb8100e491a6d94839d76c868f/lib/kaminari/models/active_record_relation_methods.rb#L7-11

つまり、Kaminari gem を最新のものに更新すると問題が解決します。ありがとう!

于 2011-05-05T02:15:51.017 に答える
1

それは私の側からのバグ、または誤用でした。私はこれを私の見解で持っていました:

<% if results.size > 0 %>
   ...
<% else %>
   <p>No results found</p>
<% end %>

そして、これは常にelse最初とは異なるページの条項で行われていました。に変更results.sizeするresults.all.sizeと動作します。ただし、が直接機能しない理由がわかりませんresults.size

于 2011-04-02T14:05:10.433 に答える