Frage

Ich habe eine durchsuchbare Reihe von Fotos, und ich möchte die Ergebnisse für die Indexseite auf die öffentlichen Einrichtungen beschränken (dh nicht zu einer privaten Sammlung, auch bekannt als auch, auch bekannt. :collection_id=>nil).

Ich habe den folgenden Bereich in meinem Modell:

scope :community, where(:collection_id => nil)

Ich habe Folgendes in meinem Controller:

def index
  @search = Photo.community.search(params[:search])
  @photos = @search.page(params[:page]).per(20)
end

Ich benutze Kaminari, um die Ergebnisse zu pagieren.

Wenn ich unbeschwerte Fotos suche (dh Photo.search(params[:search])) es funktioniert gut. Wenn ich jedoch mit dieser Zielfernrohr -Pagination nach Fotos suche, bricht die Suche. Die erste Seite wird korrekt angezeigt, aber wenn ich zu einer anderen Seite gehe, gibt es keine Ergebnisse. Um dies lokal zu testen, habe ich die Pagination auf 1 pro Seite geändert und immer noch, egal was ich nach der ersten Seite nach irgendwelchen Seiten suche, zeigen keine Ergebnisse, obwohl der Paginator angibt, dass es noch viele weitere Seiten mit Ergebnissen gibt.

Ich habe keine Ahnung, wie ich dies debuggen und beheben soll, und ich würde wirklich Hilfe verwenden. Hier ist der SQL aus dem Entwicklungsprotokoll:

Für eine normale Last der Indexseite (keine Suche):

Started GET "/photos" for 127.0.0.1 at 2011-04-28 11:58:51 -0500
  Processing by PhotosController#index as HTML
  SQL (0.4ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.3ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Context Load (0.3ms)  SELECT "contexts".* FROM "contexts" ORDER BY "contexts"."display_order" ASC
  Focus Load (0.3ms)  SELECT "focus".* FROM "focus" ORDER BY "focus"."display_order" ASC
  LandUse Load (0.3ms)  SELECT "land_uses".* FROM "land_uses" ORDER BY "land_uses"."display_order" ASC
Rendered static/_help-context.html.haml (4.5ms)
Rendered static/_help-focus.html.haml (3.1ms)
Rendered photos/_search.html.haml (304.9ms)
  SQL (0.5ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL LIMIT 1 OFFSET 0
  Photo Load (1.0ms)  SELECT "photos".* FROM "photos" WHERE "photos"."collection_id" IS NULL LIMIT 1 OFFSET 0
  Attachment Load (0.2ms)  SELECT "attachments".* FROM "attachments" WHERE ("attachments".photo_id = 1)
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1)
  Profile Load (1.7ms)  SELECT "profiles".* FROM "profiles" WHERE ("profiles".user_id = 1) LIMIT 1
  Context Load (0.2ms)  SELECT "contexts".* FROM "contexts" WHERE "contexts"."id" = 6 ORDER BY "contexts"."display_order" ASC LIMIT 1
  Focus Load (0.1ms)  SELECT "focus".* FROM "focus" WHERE "focus"."id" = 2 ORDER BY "focus"."display_order" ASC LIMIT 1
  LandUse Load (0.2ms)  SELECT * FROM "land_uses" INNER JOIN "land_uses_photos" ON "land_uses".id = "land_uses_photos".land_use_id WHERE ("land_uses_photos".photo_id = 1 ) ORDER BY "land_uses"."display_order" ASC
Rendered photos/_photo_tiles.html.haml (62.2ms)
  SQL (0.2ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL
Rendered shared/_feedback.html.haml (1.5ms)
  Role Load (0.5ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
  CACHE (0.0ms)  SELECT "profiles".* FROM "profiles" WHERE ("profiles".user_id = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
Rendered shared/_menu.html.haml (177.6ms)
Rendered shared/_footer.html.haml (2.7ms)
Rendered photos/index.html.haml within layouts/application (897.1ms)
Completed 200 OK in 1158ms (Views: 912.2ms | ActiveRecord: 8.2ms)

Für die erste Seite einer Suche (funktioniert richtig):

Started GET "/photos?utf8=%E2%9C%93&search%5Bcontext_id_in%5D%5B%5D=6&search%5Btagged_with%5D=&search%5Btext_contains%5D=&search%5Bnear%5D%5B%5D=&search%5Bnear%5D%5B%5D=100&commit=Search" for 127.0.0.1 at 2011-04-28 12:00:39 -0500
  Processing by PhotosController#index as HTML
  Parameters: {"utf8"=>"✓", "search"=>{"context_id_in"=>["6"], "tagged_with"=>"", "text_contains"=>"", "near"=>["", "100"]}, "commit"=>"Search"}
  SQL (0.4ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.3ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Context Load (0.4ms)  SELECT "contexts".* FROM "contexts" ORDER BY "contexts"."display_order" ASC
  Focus Load (0.3ms)  SELECT "focus".* FROM "focus" ORDER BY "focus"."display_order" ASC
  LandUse Load (0.4ms)  SELECT "land_uses".* FROM "land_uses" ORDER BY "land_uses"."display_order" ASC
Rendered static/_help-context.html.haml (4.6ms)
Rendered static/_help-focus.html.haml (3.1ms)
Rendered photos/_search.html.haml (161.0ms)
  SQL (0.4ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL AND "photos"."context_id" IN (6) LIMIT 1 OFFSET 0
  Photo Load (0.7ms)  SELECT "photos".* FROM "photos" WHERE "photos"."collection_id" IS NULL AND "photos"."context_id" IN (6) LIMIT 1 OFFSET 0
  Attachment Load (0.2ms)  SELECT "attachments".* FROM "attachments" WHERE ("attachments".photo_id = 1)
  User Load (0.9ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1)
  Profile Load (1.9ms)  SELECT "profiles".* FROM "profiles" WHERE ("profiles".user_id = 1) LIMIT 1
  Context Load (0.2ms)  SELECT "contexts".* FROM "contexts" WHERE "contexts"."id" = 6 ORDER BY "contexts"."display_order" ASC LIMIT 1
  Focus Load (0.2ms)  SELECT "focus".* FROM "focus" WHERE "focus"."id" = 2 ORDER BY "focus"."display_order" ASC LIMIT 1
  LandUse Load (0.2ms)  SELECT * FROM "land_uses" INNER JOIN "land_uses_photos" ON "land_uses".id = "land_uses_photos".land_use_id WHERE ("land_uses_photos".photo_id = 1 ) ORDER BY "land_uses"."display_order" ASC
Rendered photos/_photo_tiles.html.haml (204.2ms)
  SQL (0.3ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL AND "photos"."context_id" IN (6)
Rendered shared/_feedback.html.haml (1.3ms)
  Role Load (0.4ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
  CACHE (0.0ms)  SELECT "profiles".* FROM "profiles" WHERE ("profiles".user_id = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
Rendered shared/_menu.html.haml (35.5ms)
Rendered shared/_footer.html.haml (2.9ms)
Rendered photos/index.html.haml within layouts/application (729.3ms)
Completed 200 OK in 990ms (Views: 728.5ms | ActiveRecord: 7.7ms)

Für die zweite Seite einer Suche (zeigt keine Ergebnisse an, obwohl sie existieren):

Started GET "/photos?commit=Search&page=2&search[context_id_in][]=6&search[near][]=&search[near][]=100&search[tagged_with]=&search[text_contains]=&utf8=%E2%9C%93" for 127.0.0.1 at 2011-04-28 12:01:33 -0500
  Processing by PhotosController#index as HTML
  Parameters: {"commit"=>"Search", "page"=>"2", "search"=>{"context_id_in"=>["6"], "near"=>["", "100"], "tagged_with"=>"", "text_contains"=>""}, "utf8"=>"✓"}
  SQL (0.4ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.3ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Context Load (0.3ms)  SELECT "contexts".* FROM "contexts" ORDER BY "contexts"."display_order" ASC
  Focus Load (0.3ms)  SELECT "focus".* FROM "focus" ORDER BY "focus"."display_order" ASC
  LandUse Load (0.3ms)  SELECT "land_uses".* FROM "land_uses" ORDER BY "land_uses"."display_order" ASC
Rendered static/_help-context.html.haml (4.9ms)
Rendered static/_help-focus.html.haml (3.4ms)
Rendered photos/_search.html.haml (307.8ms)
  SQL (0.3ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL AND "photos"."context_id" IN (6) LIMIT 1 OFFSET 1
  SQL (0.3ms)  SELECT COUNT(DISTINCT "photos"."id") FROM "photos" LEFT OUTER JOIN "attachments" ON "attachments"."photo_id" = "photos"."id" LEFT OUTER JOIN "collections" ON "collections"."id" = "photos"."collection_id" WHERE "photos"."collection_id" IS NULL AND "photos"."context_id" IN (6)
Rendered shared/_feedback.html.haml (1.5ms)
  Role Load (0.4ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
  Profile Load (1.6ms)  SELECT "profiles".* FROM "profiles" WHERE ("profiles".user_id = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 1 ) LIMIT 1
Rendered shared/_menu.html.haml (209.5ms)
Rendered shared/_footer.html.haml (2.7ms)
Rendered photos/index.html.haml within layouts/application (822.3ms)
Completed 200 OK in 934ms (Views: 823.7ms | ActiveRecord: 5.1ms)

Beachten Sie erneut, dass ich in den oben genannten Protokollen die Pagination auf 1 pro Seite festgelegt habe, damit ich sehen kann, ob der Paginator die richtige Anzahl von Ergebnissen anzeigt, und es ist so. Wenn ich beispielsweise nach etwas suche, von dem ich weiß, dass es 3 Übereinstimmungen für eine pro Seite gibt, gibt der Paginator an, dass es drei Seiten mit Ergebnissen gibt, jedoch die Seiten 2 und 3 leer sind.

Ich bin völlig ratlos, jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Fügen Sie Ihren Bereich als Suchmethode hinzu.

class Photo < ActiveRecord::Base
  scope :community, where(:collection_id => nil)
  search_methods :community
end

class PhotosController < ActiveRecord::Base
  def index
    params[:search][:community] => true
    @search = Photo.search(params[:search])
    @photos = @search.page(params[:page]).per(20)
  end
end

Ich benutze Kaminari selbst nicht, also kann ich nicht genau sagen, aber ich weiß, dass die Metasearch -Dokumente sagen, dass sie Search_methods verwenden sollen, um Scopes in Suchanfragen zu verwenden.

Andere Tipps

Es funktioniert für mich mit den aktuellen neuesten Edelsteinen (meta_search 1.0.4, Kaminari 0.12.4).

Als Autor von Kaminari Gem, ich nehme an, einige ältere Versionen von Kaminari funktionieren möglicherweise nicht mit meta_search. Ich habe tatsächlich mehrere Fehler behoben, die diese Art von Problem verursachen können.

Können Sie bitte Ihr Kaminari -Edelstein aktualisieren und erneut versuchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top