2017-08-31 59 views
0

我有一個搜索引擎,需要在某個地址找到產品。當我點擊這個產品,我想有這樣的痕跡:Breadcrumb與之前的搜索結果[RoR]

州>城市>產品

,這個按鈕:

[返回預覽搜索]

如果你點擊'城市',我想要這個城市的所有產品等等。然後按鈕[返回到預覽搜索]以從之前的頁面獲取準確的結果。

我有一些挑戰,在這裏:

  • 我怎麼保存這個特定的URL所有這些信息?

我目前使用我的項目中的寶石的組合「pg_search」「格萊特」 + 「格萊特步道」,使搜索和顯示麪包屑,但我不知道如何在頁面中存儲這個鏈接。

一個例子是this頁,他們有:

<返回搜索(出售> PA>阿爾圖納> 16602> 2101第一大道)

謝謝。

+0

你的麪包屑是錯的 – jamesc

+0

對不起,請告訴我我的錯誤。謝謝。 –

+0

請參閱下面的答案。應該幫助清理一下 – jamesc

回答

0

你的痕跡是錯誤的這就是爲什麼你正在努力 而不是

州>城市>產品

它應該閱讀

西約克郡>利茲>紅毯

與使用Cookie(Session對象)和存儲狀態值,並在每一個階段,那麼你可以做基於在產品表

喜歡的東西

這些領域的當前值的搜索市值這樣
@products = Product.where("county = ? AND city = ?", session.current_county, session.current_city) 

顯然根據會話中是否存在值來調整上述內容,並確保在正確的位置設置和清除會話值以確保當您剛剛選擇狀態時沒有城市在會話中以使您能夠根據會話變量的存在來調整where條件。

還要注意的是狀態是保留字所以應避免因此使用縣反而狀態

的如果你真的不想使用會話,然後使用request對象的

request.original_url 

UPDATE

這段代碼在你的應用程序佈局或任何你的佈局公衆意見從下降基於URL將設置麪包屑

def set_breadcrumb(path) 
     @breadcrumbs = [] 
#  unless path.downcase.begins_with? "session" do 
     begin 
      build_path = [] 
      build_title = '' 
      r = Rails.application.routes 
      @breadcrumbs << [{text: "Home", url: '/'}] #TODO Cater for spanish translation 
      #{text: text, url: url[0]} 
      path.each_with_index do |crumb, i| 
       if crumb.downcase.to_s != "home" 
        #if crumb.to_s.downcase != "countries" 
        build_path << crumb 
        #end 
        #build_title = build_title + crumb + " " 
     #   [{:text=>"Chile", :url=>"/chile-travel"}, {:text=>"Facts", :url=>"/chile-facts"}] 
        text = crumb.humanize.titleize 
    #    r.generate controller: 'peru/facts' 
        p = build_path.join('/') 
        #logger.debug("@@@@ path #{url_for controller: p}") 
        #url = r.generate controller: p action: 'index' 
        url = r.generate controller: p unless p.downcase == "countries" 
        #logger.debug("@@@@ path generated #{url}") 
        #logger.debug("@@@@ path generated 2 #{url_for(url)}") 
        @breadcrumbs << [{text: text, url: url[0]}] unless url.blank? 
       end 
      end 
     rescue ActionController::UrlGenerationError => e 

     end 
    end 

過濾

before_action :set_title_and_breadcrumb 

之前然後調用方法和使用它在一個局部模板這樣

<%if top_breadcrumb_style%> 
    <%chevron = ' >'%> 
<%else%> 
    <%chevron = ''%> 
<%end%> 
<p> 
    You are here <%=chevron%> 
</p> 
<%@breadcrumbs.each_with_index do |crumb, i|%> 
    <% if i < @breadcrumbs.size - 1 %> 
     <%= link_to "#{crumb[0][:text]} #{chevron}", crumb[0][:url]%> 
    <%else%> 

     <p> 
      <%= crumb[0][:text].humanize %> 
     </p> 
    <% end %> 
<%end%> 

流行,在部分並使其無論你需要它

現在你有兩個選擇來抓住城市和州與你的where子句一起使用。你可以詢問你需要包含的值的麪包屑或URI路徑。 希望有幫助

+0

Ji jamesc,謝謝你,對不起,因爲我不希望這個頁面取決於cookies,因爲進入這個鏈接時,每個人都不可能在麪包屑上有相同的鏈接。 –

+0

@FillypeFarias Session對象cookie是正確的解決方案,並且在使用會話存儲用戶狀態方面沒有缺陷。不知道爲什麼你會擔心這個,除非你不瞭解cookies,在這種情況下,你應該閱讀使用Rails會話對象在這裏https://www.justinweiss.com/articles/how-rails-sessions-work/ – jamesc

+0

我會更仔細地檢查它,但我怎麼能這樣做:我與你分享一個鏈接頁面,我們都有相同的麪包屑? –