Frage

Ich folge Ryan Bates 'Railcasts: http://railscasts.com/episodes/37-simple-search-formBei der Lösung meines Problems mit den Suchergebnissen auf einer Seite mit dem Willensbetrieb.

Hier beantwortet er die Frage, wie dieses Problem gelöst werden kann. Ich habe sie jedoch ausprobiert und hatte kein Glück. Nach seiner zweiten Lösung erhalte ich als Ergebnis einen Nomethod -Fehler für "Search_Conditions".

Der Code:

    projects/index.rhtml 
<% form_tag projects_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

projects_controller.rb 
def index
  @projects = Project.search(params[:search])
end

models/project.rb 
def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

Seine Antworten:

Eine Möglichkeit besteht darin, die Klassenmethode "Search_Conditions" aufzurufen, und anstatt das Fund zu haben, wird sie nur ein Bedingungen Array zurückgeben, damit Sie sie in der paginierten Methode verwenden können.

Curse.paginate (: alle,: stationstorten => cours.search_conditions (..))

Ein anderer besteht darin, die Methode "pagined_search" aufzurufen und sie "paginat" anstelle von "find" aufzurufen.

Zuletzt können Sie die Suchmethode einen Block akzeptieren lassen, der mit dem _scope die Fundbedingungen einstellt. Auf diese Weise können Sie in diesem Block "Paginate" nennen und die Bedingungen werden automatisch angewendet.

Kann mir jemand erklären, wie ich dies lösen soll? Ich bin neu in Rails und vielleicht habe ich nur missverstand, was er sagt.

War es hilfreich?

Lösung

Railscast, dem Sie folgen, ist ziemlich alt, seitdem haben sich viele geändert. Versuchen Sie, die Implementierung von zu ändern search Methode wie diese:

def self.search(search)
  if search
    where 'name LIKE ?', "%#{search}%"
  else
    scoped
  end
end

Und so etwas in Controller:

def index
  @projects = Project.search(params[:search]).paginate(:page => params[:page])
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top