Rails的太阳黑子过滤器/带URL方面的问题? 删除旧的“得PARAMS”(Rails Sun

2019-10-19 04:40发布

我试图理解和建立太阳黑子的宝石在我的Rails 4.0的项目。 我想实现我的开源项目,更好的搜索BTC-店 ,但我有点困惑如何做到这一点与太阳黑子。

目前,我有以下结构(模型):

项目:

# Relationship with Category
belongs_to :category 
accepts_nested_attributes_for :category

searchable do
    text :name, :description
    integer :category_id
    string  :sort_name do # why I have this here? I dont understand this code
          name.downcase.gsub(/^(an?|the)/, '')
    end
end

控制器:

@search = Item.search do
    fulltext params[:search] do
      boost_fields :name => 2.0
    end

    # With category
    facet :category_id
    with(:category_id, params[:category_id]) if params[:category_id].present?

    # Kaminari
    paginate :page => params[:page], :per_page => 8
end

@items = @search.results

# Here a quick fix to show Category Name, instead of Category ID to user.
@items_categories = []
@search.facet(:category_id).rows.each do |row|
    @items_categories << [Category.find_by_id(row.value), row.count] 
end 
@items_categories = @items_categories.sort_by { |e| e[0].name } 

视图:

<% @items_categories.each do |category| %>
    <div class="country-item">
        <a href="#" class="country-row">
            <div class="country">
              <% if params[:category_id].blank? %>
                <%= link_to category[0].name, :category_id => category[0].id  %> (<%= category[1] %>)
              <% else %>
                <%= category[0].name %>(<%= link_to "remove", :category_id => nil %>)
              <% end %>
            </div>
        </a>
    </div>
 <% end %>

问题:

当我寻找的东西,我有理想的效果。 看看类别和主要的网址:


现在,如果我点击任何列出的类别,而不是添加类“获取” PARAMS,这是删除旧PARAMS,然后加入category_id PARAM。

现在我的网址是http://localhost:3000/stores?category_id=6 ,而不是http://localhost:3000/stores?utf8=%E2%9C%93&search=bitcoin&category_id=6 看:

所以,我能做错了吗? 还有一件事,如果你看到在我的代码和东西的问题,可以是做得更好,请告诉我。 我读了所有太阳黑子文件和由Ryan贝茨RailsCast ,但我不明白我怎么可以用“正确的方式”做事。

Answer 1:

以一个暗示从这个答案

代替

<%= link_to category[0].name, :category_id => category[0].id  %> (<%= category[1] %>)

尝试使用

<%= link_to category[0].name, request.parameters.merge({:category_id => category[0].id})  %> (<%= category[1] %>)

这将类别ID追加到现有的GET参数。

但是,这有一个缺点太-由于使用的Facets ,钻取会继续追加参数,你可能最终会做一个AND默认。 即像

http://localhost:3000/stores?utf8=%E2%9C%93&search=bitcoin&category_id=6&category_id=7

所以,除非你想向下钻取默认功能,您可能要调整的params组合逻辑。



文章来源: Rails Sunspot filter / facet issue with URL? Deleting old “get params”