2016-11-16 10 views
0

Ich habe versucht, das Ransack-Such-Juwel in ein Projekt zu implementieren, an dem ich gerade arbeite. Ich bin mir ziemlich sicher, dass ich es richtig eingerichtet habe. Ich möchte in der Lage sein, Profile zu suchen und habe meinen Code in der Profile-Controller wie so platziert:Ransack Ruby On Rails Ergebnis Wont Render

def index 
@q = Profile.search(params[:q]) 
@profile = @q.result(distinct: true) 
@profiles = Profile.all 
end 

und das Profil index.html.erb Datei wie folgt:

<%= search_form_for @q do |f| %> 
<div class="field"> 
<%= f.label :first_name_cont, "Name Contains" %> 
<%= f.search_field :first_name_cont %> 
</div> 
<div class="actions"><%= f.submit "Search" %></div> 
<% end %> 

Es befindet sich auf der tut Es scheint zumindest so zu sein, als ob man versucht, die Datenbank korrekt zu durchsuchen, aber keine Ergebnisse auf dem Bildschirm darstellen wird. Es könnte etwas Offensichtliches sein, das ich gerade nicht sehe. Jede Hilfe wird sehr geschätzt.

Antwort

1

Versuchen ein, wie dies in Ihrem Controller und Ansicht einrichten:

#profile controller 
    def index 
    @search = Profile.search(params[:q]) 
    @profiles = @search.result(distinct: true) 
    end 

    #profile index 
    <%= search_form_for @search do |f| %> 
    <%= f.label :first_name_cont, "name in profile" %><br> 
    <%= f.submit "Search", class:"btn btn-info btn-block" %> 
    <% end %> 

    <% @profiles.each do |profile| %> 
    <%= profile.name %> 
    <% end %> 
+0

Dank Gurmukh, tat dies der Trick. Ich habe ein paar kleine Änderungen an dem vorgenommen, was du mir gegeben hast. Aber es war ziemlich genau richtig. Sehr geschätzt. –

0

Ist das Problem, wenn Sie versuchen, auf @profile zuzugreifen, oder ist es nur mit dem Wissen, wie Ergebnisse angezeigt werden? Wenn letzteres jetzt in @profile gespeichert wird, müssen Sie sie durchlaufen und auswählen, was Sie von jeder Profilinstanz anzeigen möchten.

Seit ich dieses Juwel benutzt habe, scheint es standardmäßig die Indexseite der gegebenen Klasse zu sein (also in deinem Fall die Profilindexseite). So können Sie entweder:

  1. Lassen Sie einfach die Ergebnisliste unterhalb der Suchmaske, die Sie oben geteilt haben.
  2. Verschieben Sie die Suchleiste auf so etwas wie einen Homepages-Controller, sodass bei einer Suche die Profilindexseite aufgerufen wird und nur die Ergebnisse angezeigt werden.