我有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">✓</p>
<% else %>
<!--<%= "\u2715" %>-->
<p class="offer_no">✕</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
?
谢谢!
答案 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代码,所以你必须用其他东西替换它。 有多种方法可以找到当前路径或网址:查看here和here
闪烁?
闪烁对于传递临时数据非常有用,我强烈建议您阅读更多有关它们的信息。 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>