带有先前搜索结果的面包屑[RoR]

时间:2017-08-31 18:57:59

标签: ruby-on-rails

我有一个搜索引擎需要在某个地址找到产品。当我点击这个产品时,我想要这个面包屑:

状态>城市>产品

这个按钮:

[返回预览搜索]

如果您点击“城市”,我想要来自这个城市的所有产品,依此类推。按钮[返回预览搜索]以获得之前页面的确切结果。

我在这里遇到了一些挑战:

  • 如何使用此特定网址存储所有此类信息?

我目前正在我的项目中使用宝石的组合'pg_search''gretel' + 'gretel-trails'进行搜索并显示面包屑,但我不知道如何在页面中存储此链接。

一个例子是this页面,他们有:

  

<返回搜索(出售> PA> Altoona> 16602> 2101 1st Ave)

谢谢。

1 个答案:

答案 0 :(得分:0)

你的面包屑是错误的,这就是你挣扎的原因 而不是

  

状态>城市>产品

应该阅读

  

西约克郡>利兹>红毯

通过使用cookie(Session对象)并在每个阶段存储状态值和City值,您可以根据products表中这些字段的当前值进行搜索

这样的东西
@products = Product.where("county = ? AND city = ?", session.current_county, session.current_city)

显然根据会话中是否存在值来调整上述内容,并确保在正确的位置设置和清除会话值,以确保当您刚刚选择状态启用时,会话中没有城市根据会话变量的存在来调整where条件。

另请注意,状态是一个保留字,因此应避免使用县而不是州

如果您真的不想使用会话,请使用请求对象

request.original_url

<强>更新

您的应用程序布局中的此代码或您的公共视图来自的任何布局将根据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路径以获取您需要包含的值。 希望有所帮助

相关问题