3

Ich habe views/search/search_textbook.html.erb, die die Ergebnisse der Suche zeigt. Wenn ein Benutzer auf textbook.title von <%=link_to "#{textbook.title}", textbook_path(textbook.id) %> klickt, ruft der Benutzer die show-Methode von textbooks_controller auf.Wie kann ich "link_to 'Zurück zum Suchergebnis'" Feature hinzufügen Rails

jedoch innerhalb views/textbooks/show.html.erb hat <%= link_to 'Back to list', textbooks_path %>, dass nur Benutzer auf die Indexseite des Lehrbuches übernehmen (views/textbooks/index.html.erb).

unten ist meine Seite, die die Suche views/search/search_textbook.html.erb Ergebnisse zeigt:

<div class="container"> 
    <div class="row"> 
     <div class="col-sm-12">   
     <table class = "table table-striped"> 
      <h1>Textbook Search Results</h1> 

      <thead> 
       <tr> 
        <th>Textbook Title</th> 
        <th>Subject</th> 
        <th>Price</th> 
        <th>Accept Offer</th> 
        <th>Created on</th> 
       </tr> 
      </thead> 

      <tbody> 
      <% @textbooks.each do |textbook| %> 
       <tr> 
       <!--<td><%= textbook.title %></td>--> 
       <td><%=link_to "#{textbook.title}", textbook_path(textbook.id) %></td> 
       <td><%= textbook.subject %></td> 
       <td>$<%= textbook.price %></td> 
       <td> 
        <% if textbook.offer == true %> 
        <!--<%= "\u2713"%>--> 
        <p class="offer_yes">&#x2713;</p> 
        <% else %> 
        <!--<%= "\u2715" %>--> 
        <p class="offer_no">&#x2715;</p> 
        <%end%> 
       </td><!--somehow below need Date.parse()--> 
       <td><%= textbook.created_at.strftime("%d %b. %Y") %></td> 
       </tr> 
      <% end %> 
      </tbody> 
     </table> 

     <br> 

     <div> 
      <%= form_tag search_textbook_path, :method => :get do %> 
      <p> 
      <a style="color:#000000" title="Suggest!" data-toggle="popover" data-trigger="hover" data-content="Title or Subject"> 
       <%= text_field_tag :search, params[:search], placeholder: "Search textbooks" %> 
      </a> 
      <%= submit_tag "Search", :name => nil, class: "btn btn-success btn-sm" %> 
      <% end %> 
     </div> 

     <%= link_to 'Sell Textbook', new_textbook_path, class: "btn btn-primary" %> 
     <%= link_to 'Back to list', textbooks_path %> 

     <script> 
     $(document).ready(function(){ 
      $('[data-toggle="popover"]').popover(); 
     }); 
     </script> 

    </div> 
    </div> 
</div> 

unten ist mein views/textbooks/show.html.erb Datei:

<div class="container"> 
    <div class="row"> 
     <!--<div class="col-xs-offset-4 col-xs-4 col-xs-offset-4">--> 
     <div class="col-sm-offset-4 col-sm-4 col-sm-offset-4"> 

      <!--<p id="notice"><%= notice %></p>--> 

      <p> 
       <h4><strong>Title:</strong> 
        <%= @textbook.title %></h4> 
       </p> 

       <p> 
        <strong>Subject:</strong> 
        <%= @textbook.subject %> 
       </p> 

       <p> 
        <strong>Price:</strong> 
        $<%= @textbook.price %> 
       </p> 

       <p> 
        <strong>Accept Offer:</strong> 
        <%if @textbook.offer == true%> 
        <%='Yes'%> 
        <%else%> 
        <%='No'%> 
        <%end%> 
       </p> 

       <p> 
        <strong>Description:</strong> 
        <pre><%= @textbook.description %></pre> 
       </p> 

       <p> 
        <% if !(@textbook.thumbnail_content_type =~ /^image/).nil? %> 
        <strong>Image:</strong> 
        <pre><a href="<%= @textbook.thumbnail.url %>"><%= image_tag @textbook.thumbnail.url(:medium) %></a></pre> 
        <%else%> 
        <!--<strong>No Image.</strong>--> 
        <%end%> 
       </p> 

       <p> 
        <strong>Created on:</strong> 
        <%= @textbook.created_at.strftime("%d %b. %Y") %> 
       </p> 

       <p> 
        <!--<%= link_to 'Contact', new_contact_path %>--> 
        <%= link_to 'Contact', new_contact_textbook_path(@textbook), class: 'btn btn-info' %> 

       </p> 

       <%if @textbook.user_email == current_user.email %> 
       <%= link_to 'Edit', edit_textbook_path(@textbook) %> | 
       <%= link_to 'Back to list', textbooks_path %> 
       <%else %> 
       <%= link_to 'Back to list', textbooks_path %> 
       <%end%> 
     </div> 
    </div> 
</div> 

Wie kann ich eine clickalbe Taste back to search results IF ONLY hinzufügen, wenn der Benutzer gekommen ist aus den Suchergebnissen ??

Danke!

Antwort

1

So hätte ich es gemacht.

1) den aktuellen Pfad finden und es auf einem Flash zuweisen:

Wallungen sind nicht nur für Nachrichten verwendet werden, sind sie eigentlich die einfachste Möglichkeit, temporäre Daten an eine andere Aktion zu senden. So in der Suchaktion der Lehrbuch-Controller:

flash[:last_search_path] = [the current path] 

Anmerkung: [the current path] nicht Code Ruby ist, werden wir später sehen, wie es auf den Link in Ihrem Lehrbuch zeigt

2) finden Verwenden Ausblick:

In Lehrbuch zeigen Ansicht alles, was Sie tun müssen, ist:

<% if flash[:last_search_path] %> 
    <%= link_to "back to search results", flash[:last_search_path] %> 
<% end %> 

Aber ... wie findest du [den aktuellen Pfad]? Offensichtlich ist [der aktuelle Pfad] kein Ruby-Code, also müssen Sie ihn durch etwas anderes ersetzen. gibt es mehrere Möglichkeiten, die aktuelle Pfad oder URL zu finden: suchen here und here

Wallungen?

Flashes kann sehr nützlich für die Weitergabe temporärer Daten sein, ich empfehle Ihnen, mehr über sie zu lesen. Learn more about flashes here

Andere Lösungen für die Datenübertragung zwischen den Aktionen

Sie können params verwenden, die Verbindungsparameter zu übergeben, aber es wäre mehr Komplexität hinzuzufügen. read more about params here

Sie können auch Cookies verwenden, aber dass es den Benutzer Browser speichern und würde nur nicht, wenn er aus dem Suchergebnis kam: read more about sessions here

+0

Das ist brilliant! ! Vielen Dank! Aber meine Suche Aktion ist nicht in Lehrbuch-Controller. Die 'search' Aktion ist in' search_controller', sollte ich ersetzen? –

+1

Es funktioniert! Aber ich möchte die Flash-Nachricht ausblenden. –

+0

Glücklich, dass für Sie gearbeitet hat! Es spielt keine Rolle, wo Ihre Aktion ist, wenn Sie zur nächsten Aktion gelangen, die Sie auf das Flash-Objekt zugreifen können. Die Flash-Nachricht ist normalerweise nur eine Nachricht, die den Wert eines Flash anzeigt, wenn es existiert. flash [: notice] macht das selbe wie flash [: last_search_path], der einzige Unterschied ist, dass es eine Nachricht anzeigt, überprüfen Sie Ihre Anwendungslayout-Ansichtsdatei und sehen Sie, welche Bedingungen Sie haben. – bTazi

1

Above Blitz ist guter Weg. Aber ich benutze unten den Weg.

<p> 
    <%if URI(request.referer).path == "/search_textbook" %> 
     <%= link_to 'Back to Search Result', request.referer, class: "btn btn-warning" %> 
    <%end%> 
</p>