如何添加" link_to'返回搜索结果'"功能Rails

时间:2016-04-23 00:34:52

标签: html ruby-on-rails ruby twitter-bootstrap web-applications

我有views/search/search_textbook.html.erb显示搜索结果。当用户单击<%=link_to "#{textbook.title}", textbook_path(textbook.id) %>的textbook.title时,用户正在从show调用textbooks_controller方法。

但是,views/textbooks/show.html.erb内部<%= link_to 'Back to list', textbooks_path %>只有用户访问教科书的索引页(views/textbooks/index.html.erb)。

下面是我的页面,其中显示了搜索结果views/search/search_textbook.html.erb

<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>

下面是我的views/textbooks/show.html.erb文件:

<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>

如果用户来自搜索结果,我该如何添加clickalbe按钮back to search results

谢谢!

2 个答案:

答案 0 :(得分:1)

我就是这样做的。

1)找到当前路径并将其指定给闪光灯:

闪存不仅用于消息,它们实际上是将临时数据发送到其他操作的最简单方法。 所以在教科书控制器的搜索动作中:

flash[:last_search_path] = [the current path]

注意:[the current path]不是ruby代码,我们稍后会看到如何找到它

2)使用教科书展示视图中的链接:

在教科书展示视图中,您所要做的就是:

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

但是......你如何找到[当前路径]? 显然[当前路径]不是ruby代码,所以你必须用其他东西替换它。 有多种方法可以找到当前路径或网址:查看herehere

闪烁?

闪烁对于传递临时数据非常有用,我强烈建议您阅读更多有关它们的信息。 Learn more about flashes here

在行动之间传递数据的其他解决方案

您可以使用params传递该链接参数,但会增加更多复杂性。 read more about params here

您也可以使用Cookie,但会将其保存到用户浏览器中,只有当他来自搜索结果时才会有效:read more about sessions here

答案 1 :(得分:1)

以上闪光是好方法。但我用下面的方式。

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